Ich habe ein Projekt mit git und möchte nur ein bestimmtes Verzeichnis klonen oder abrufen, wie myproject / javascript, genau wie Subversion.
Nehmen Sie einige Änderungen vor, legen Sie fest und drücken Sie erneut zurück.
Es ist möglich?
Ich habe ein Projekt mit git und möchte nur ein bestimmtes Verzeichnis klonen oder abrufen, wie myproject / javascript, genau wie Subversion.
Nehmen Sie einige Änderungen vor, legen Sie fest und drücken Sie erneut zurück.
Es ist möglich?
Antworten:
git fetch
git checkout HEAD path/to/your/dir/or/file
Wobei " path/...
" in (3) im Verzeichnis direkt unter dem Repo-Stammverzeichnis beginnt, in dem sich Ihr " .../file
" befindet
HINWEIS: Anstelle von "HEAD" kann der Hash-Code eines bestimmten Commits verwendet werden. Anschließend erhalten Sie die für dieses Commit spezifische Revision (Datei) oder Revision (Verzeichnis).
--
ist jedoch nicht erforderlich. Es erzwingt, dass die Bits danach als Pfad interpretiert werden. Also, ja, wenn Sie eine Datei mit dem Namen haben --help
, den Sie auschecken möchten, müssen Sie diese Bindestriche voranstellen:git checkout HEAD -- --help
In einem leeren Verzeichnis:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
oder checkout
Befehle, wir können einfach die Pull-Anfrage nach dem remote add
Befehl stellen, um den gesamten Hauptzweig abzurufen.
Nachdem ich viel nach einer Antwort gesucht, nicht gefunden, aufgegeben, erneut versucht usw. hatte, fand ich schließlich in einem anderen SO-Thread eine Lösung dafür:
Wie man alle Ordner bis auf einen git-pull
So kopieren und einfügen, was da ist:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
Um das zu tun, was OP will (arbeiten Sie nur an einem Verzeichnis), fügen Sie einfach dieses eine Verzeichnis hinzu .git/info/sparse-checkout
, wenn Sie die obigen Schritte ausführen.
Vielen vielen Dank an @cforbish!
master
. git branch --set-upstream-to=origin/<branch>
Es ist nicht möglich. Sie müssen alle Repository oder nichts ziehen.
Vielleicht kann dieser Befehl hilfreich sein:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Wenn Sie die neuesten Änderungen in einem Verzeichnis abrufen möchten, ohne es einzugeben, haben Sie folgende Möglichkeiten:
$ git -C <Path to directory> pull
git clone --filter
ab Git 2.19
Diese Option überspringt das Abrufen nicht benötigter Objekte vom Server.
Ich habe eine ausführliche Antwort geschrieben, in der der aktuelle Supportstatus erläutert wird: Wie klone ich nur ein Unterverzeichnis eines Git-Repositorys?
Es ist sehr wahrscheinlich, dass alles, was git clone
in diesem Bereich implementiert wird, auch git pull
Analoga enthält.
Versucht und getestet funktioniert das!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Hoffe das war hilfreich!
Manchmal möchten Sie nur einen Blick auf frühere Kopien von Dateien werfen, ohne die Mühe zu haben, die Unterschiede durchzugehen.
In einem solchen Fall ist es genauso einfach, einen Klon eines Repositorys zu erstellen und das spezifische Commit zu überprüfen, an dem Sie interessiert sind, und sich das Unterverzeichnis in diesem geklonten Repository anzusehen. Da alles lokal ist, können Sie diesen Klon einfach löschen, wenn Sie fertig sind.
Bei all den Schwierigkeiten mit theoretischen Dateipfaden und Beispielen wie ich hier ein Beispiel aus der Praxis: Microsoft bietet seine Dokumente und Beispiele auf Git Hub an. Leider sammeln sie alle Beispieldateien für eine große Anzahl von Themen in diesem Repository:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Ich war nur an den Microsoft Dynamics js-Dateien im Pfad interessiert
msdn-code-gallery-community-s-z/Sdk.Soap.js/
Also habe ich folgendes gemacht
ein ... kreieren
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
Datei in meinem Repositorys-Ordner auf der Festplatte
git sparse-checkout init
in diesem Verzeichnis mit cmd unter Windows
Der Dateiinhalt von
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
ist
Sdk.Soap.js/*
endlich mach ein
git pull origin master