Frage

Wenn ich aus ein paar Tutorials ausgeliehen bin, kann ich in einem Git -Repo einen spärlichen Checkout eines bestimmten Ordners durchführen.

mkdir git-completion && cd git-completion
git init
git remote add –f origin https://github.com/git/git.git
git config core.sparsecheckout true
echo contrib/completion/ >> .git/info/sparse-checkout
git pull origin master

Nehmen wir zum Beispiel an, ich bin hinter der git-completion.bash, git-completion.tcsh, usw. Skripte, die in der sind contrib/completion Ordner dieses Repo.

Der oben genannte Sparse-Checkout gibt mir den gewünschten Ordner zurück, aber es scheint eine verschachtelte Dateistruktur zu haben:

git-completion/contrib/completion/git-completion.bash

Ist es möglich, die Dateien stattdessen in das übergeordnete Verzeichnis zu ziehen?

git-completion/git-completion.bash
War es hilfreich?

Lösung

Sie können dies mit tun git show:

git show <revision>:path/to/file.txt > different/path/to/otherfile.txt

In Ihrem speziellen Fall:

git show HEAD:git-completion/contrib/completion/git-completion.bash > git-completion/git-completion.bash

Wiederholen Sie dies für jede Datei, die Sie auschecken möchten. Ich denke, der Grund für die Unterverzeichnisse ist jedoch, dass wenn diese in a gebündelt werden git Release, sie setzen in die contrib/completion Unterverzeichnis, daher ist es vielleicht besser, sich an das Repository -Layout zu gewöhnen ...

Andere Tipps

Je nachdem, was Sie erreichen möchten, haben Sie zwei Optionen. Wenn Sie in der Lage sein möchten, Änderungen an den Dateien noch zu verfolgen, würde ich Symlinks begehen. Wenn Sie sich nicht um lokale Änderungen kümmern, würde ich verwenden git archive.

Symlinks begehen

Sie können Symlinks für die Dateien verpflichten, die Sie interessieren, und verwenden Sie die Ersatzkokheit, um diese auch zu erhalten.

ln -s contrib/completion/git-completion.bash git-completion.bash
git add git-completion.bash

Auf diese Weise können Sie die Dateien bearbeiten und Änderungen an ihnen immer noch begehen.

Git -Archiv

Dies extrahiert einfach den Inhalt, den Sie suchen. Änderungen werden im Repository nicht verfolgt.

# generic
git archive <revision>:<path> | tar -xf -

#specific to your example
git clone --bare https://github.com/git/git.git ~/git-completion-bare
mkdir git-completion && cd git-completion
git archive --remote ~/git-completion-bare master:contrib/completion/ | tar -xf -

EDIT: Es sieht aus wie github unterstützt nicht git archive --remote. Es ist weiter unten enthalten, falls jemand einen anderen Hosting -Dienst verwendet, der dies zulässt.

Git -Archiv mit -Remote

Mit Git Archive können Sie die Änderungen sogar direkt von einem Remote -Repository herunterladen, ohne das Repository zuerst zu klonen. Der Nachteil ist, dass Sie die lokalen Änderungen mit Git nicht verfolgen können.

# General form
git archive --remote <url> <revision>:<path> | tar -xf -
# your example 
git archive --remote https://github.com/git/git.git master:contrib/completion/ | tar -xf -

Sie haben jetzt die Dateien im aktuellen Verzeichnis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top