2010-03-23 19 views
7

Ich bin ein Student mit vielen Skripten, Bibliographie Daten in Bibtex, Diplomarbeit in Latex, Präsentationen in Open Office, Plakate in Scribus und Zahlen und Ergebnisdaten. Ich möchte alles in einem Projekt unter Versionskontrolle stellen. Wenn ich dann an einem Teil wie den Bibliographiedaten arbeiten muss, möchte ich dieses Unterverzeichnis überprüfen, es nach Bedarf ändern und es zusammenführen. Ich möchte die Möglichkeit haben, eine Version auf meinem Heimcomputer auszuchecken, und a Unterschiedliche zu meinem Arbeitscomputer und Änderungen an jedem selbständig vornehmen und eventuell wieder zusammenführen. Ich möchte auch gerne ein Stück Code aus diesem großen Projekt lesen und mit Versionierung in ein separates Projekt importieren. Wenn ich Änderungen vornehmen möchte, würde ich gerne in der Lage sein, sie wieder mit dem ursprünglichen Projekt zusammenzuführen.Git Teilbaum nicht richtig .gitignore, wenn Sie einen Teil Klon

Basierend auf meinem Verständnis kann git subtree dies tun.

http://github.com/apenwarr/git-subtree

Es ist ein Beispiel, das entlang der Linien ist, was ich versuche zu tun:

http://psionides.jogger.pl/2010/02/04/sharing-code-between-projects-with-git-subtree/

der Stamm meines Projektes sagen die Verzeichnisse enthalten: (bib bin cfg Daten fig src todo).

Wenn ich

git subtree split -P bib -b export 
git checkout export 

ich das bib-Verzeichnis erhalten, und alle Dateien, die oder als binäre ignoriert werden sollte, basierend auf .gitignore wie das src-Verzeichnis und alles darin, die in endet eine Tilde oder das Verzeichnis ./data.

[email protected]:~/research/trunk$ ls * -r 
biblography.bib JabRef 

src: 
script1.sh~ README~   script2.sh~ 
script3.sh~ script4.R~ script5.awk~ 
script5.py~ 

cfg: 
cfgFile1.ini~ cfgFile2.ini~ cfgFile3.ini~ 

bin: 
bigBinaryPackage1 bigBinaryPackage2 

[email protected]:~/research/trunk$ 

Meine .gitignore Datei ist wie folgt:

*.doc diff=word 
*.tex diff=tex 
*.bib diff=bibtex 
*.py diff=python 
*.eps binary 
*.jpg binary 
*.png binary 
./bin/* binary 
*~ 

Wie kann ich das verhindern?

+1

Haben Sie sich mit Submodulen beschäftigt? Sie sind für diese Art von Sache und ein bisschen mehr automatisiert ... – Cascabel

+1

Vielen Dank für den Kommentar. Subtree angeblich hat viele Vorteile umrissen: http://apenwarr.ca/log/?m=200904#30 –

+0

@D W: Das ist fair - Submodule sind weit von perfekt. Ich wollte nur sicherstellen, dass es als Option da draußen war. – Cascabel

Antwort

4

Sieht für mich wie all diese ignorierten Dateien sind nicht wirklich in Ihrem Repo - sie sind nur übrig von Ihrem vorherigen Checkout.

Da Sie einen bestimmten Teilbaum aus Ihrem ursprünglichen Projekt extrahiert haben, ist Ihre .gitignore-Datei nicht mehr vorhanden, sodass die Dateien nicht mehr "ignoriert" werden, sodass Sie sie im Git-Status sehen. Aber sie sind auch nicht Teil Ihres Repo; sie sitzen nur da.

Probieren Sie 'git clean', um sie zu reinigen.

+0

Was ist mit Umgebungsfaktoren wie Knotenmodule oder Hersteller? –

3

Ich denke, das ist nichts wirklich spezifisch für git-subtree, Sie hätten die gleiche Situation, wenn Sie zwischen zwei Zweigen umgeschaltet und einer von ihnen generiert einige zusätzliche Dateien, die in Gitignore waren und die andere würde nicht wissen über sie ... Ich würde sagen, dass dieses Verhalten von git ziemlich korrekt ist, denn wenn ich eine Datei zu gitignore hinzufüge, erwarte ich, dass sie es komplett ignoriert und nichts damit macht - das schließt auch ein, es nicht zu löschen bewege dich in einen Zweig, wo es nicht gittig ist ...

Die möglichen Möglichkeiten, wie Sie damit umgehen können wären:

  • die gleichen Dateien auch auf die gitignore im Unterverzeichnis/Teilprojekt
  • do git sauber hinzufügen, bevor Sie Zweige wechseln
  • dies einfach ignorieren, Schließlich werden Sie wahrscheinlich nicht viel Arbeit in dem Zweig tun, der von git subtree split erzeugt wurde, außer die Commits nach draußen zu schieben ... Wenn Sie das Teilprojekt getrennt bearbeiten wollen, dann können Sie das Teilprojekt selbst in einem anderen Teil auschecken Verzeichnis außerhalb des Hauptverzeichnisses.
0

Ihre .gitignore-Datei falsch ist das Mischen gitignore Syntax mit gitattributes Syntax.

Die .gitignore Datei sollte nur Muster haben. Sachen wie

*.py diff=python 
*.eps binary 

gehört in die .gitattributes Datei stattdessen.