2013-01-14 11 views
14

Ich versuche, etwas auf einer Wordpress-Installation zu testen. Auf diese Weise möchte ich das Repo schnell replizieren. Allerdings ist das Upload-Verzeichnis (wp-content/uploads) massiv, also würde ich es gerne ignorieren.Git Klon, ein Verzeichnis zu ignorieren

Hinweis: Ich möchte dieses Verzeichnis die ganze Zeit nicht .gitignore, nur für dieses Szenario.

Grundsätzlich möchte ich einen Befehl wie diesen Pseudocode: git clone --ignore wp-content/uploads.

Ist die beste Möglichkeit, dieses Verzeichnis .gitignore hinzuzufügen, zu klonen und dann .gitignore wiederherzustellen? Oder gibt es eine bessere Methode?

+0

Die Antwort auf diese Frage sagt, dass Sie es mit einer Option nicht tun können, mindestens zu klonen: http://stackoverflow.com/questions/4257622/clone-of-git-repository-excluding-subverzeichnis – Michael

+0

@Michael Mir geht es gut, nicht 'Klon' zu verwenden. Ich werde mir diese Frage/Antwort ansehen. Vielen Dank! – hookedonwinter

Antwort

5

git clone wird immer das vollständige Repository * klonen, einschließlich aller vorherigen Commits, die dem Repository hinzugefügt wurden. Selbst wenn Sie die Dateien vorübergehend entfernen und dann klonen, erhalten Sie immer noch die älteren Versionen, die diese Dateien enthalten.

Durch das Bearbeiten der .gitignore werden auch keine nachverfolgten Dateien aus dem Repository entfernt, auch wenn sie normalerweise ignoriert würden.

Also nein, es ist nicht wirklich möglich, einen bestimmten Ordner beim Klonen zu überspringen.

* Es ist möglich, die Anzahl der während eines Clones abgerufenen Commits zu begrenzen, aber dies macht das Repository nicht sehr brauchbar.

3

Sie können die zu klonende Tiefe angeben (--depth=1, um nur 1 Festschreibung zu erhalten). Möglicherweise möchten Sie eine Verzweigung einrichten, in der dieses Verzeichnis fehlt, und dann nur mit der Tiefe von eins klonen. Da git Snapshot-basiert ist, ist es nicht einfach, einen Teil eines Commits beim Klonen auszuschließen. Dies ist am nächsten zu dem, was Sie wollen.

Wenn Sie die volle Kontrolle über diesen Repo haben, möchten Sie vielleicht ein Submodul dieses Verzeichnisses erstellen und nur ein Submodul-Update durchführen, wenn Sie diesen Teil verwalten möchten.

2

Auf dem Server:

git checkout master^0 # the ^0 checks out the commit itself, not the branch 
git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD 
git checkout -b filtered 

(Filter-Zweig auf einem großen Projekt hier neue Geschichte erzeugt bei etwa 2-3 begeht pro Sekunde)

Dann mögen, überall,

git init 
git remote add gimme your://repo/path 
git fetch gimme filtered 

bearbeiten: fixed Syntaxfehler nach http://git-scm.com/docs/git-filter-branch

5

Ein bisschen spät auf die Party, aber: Willst du keine spärliche Kasse?

mkdir <repo> && cd <repo> 
git init 
git remote add –f <name> <url> 

aktivieren spärliche-Kasse:

git config core.sparsecheckout true 

konfigurieren spärlich-Kasse, indem sie in den gewünschten Teilbäume auflistet.git/info/Sparse-Kasse:

echo some/dir/ >> .git/info/sparse-checkout 
echo another/sub/tree >> .git/info/sparse-checkout 

Kasse von der Fernbedienung:

git pull <remote> <branch> 

Siehe http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/ für weitere Informationen.

+0

Dies ruft immer noch alles ab, obwohl nur die genannten Verzeichnisse/Dateien in die lokale Sandbox ausgecheckt sind. –