2010-03-23 22 views
7

Je suis un étudiant diplômé avec de nombreux scripts, des données bibliographiques en bibtex, thèse en latex, des présentations en bureau ouvert, des affiches en scribus, et les chiffres et les résultats. Je voudrais tout mettre dans un projet sous contrôle de version. Ensuite, quand j'ai besoin de travailler sur une partie telle que les données bibliographiques, je voudrais vérifier ce sous-répertoire, le modifier si nécessaire et le fusionner en arrière. Je voudrais la possibilité de vérifier une version sur mon ordinateur à la maison, et un différent à mon ordinateur de travail et apporter des modifications à chacun indépendamment et finalement les fusionner de retour. J'aimerais aussi pouvoir vérifier un morceau de code de ce grand projet et l'importer avec le versioning dans un projet séparé. Si je peux changer je voudrais pouvoir les fusionner au projet original. D'après ce que j'ai compris, git subtree peut le faire.Git sous-arbre ne pas utiliser correctement .gitignore lors d'un clone partiel

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

Il est un exemple qui va dans le sens de ce que je suis en train de faire à:

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

Dites le tronc de mon projet contenait les répertoires: (bin bavette cfg données fig src todo).

Lorsque j'utilise

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

je reçois un répertoire de dossard, plus tous les fichiers qui auraient été ignorés ou considérés comme binaire à base de .gitignore tels que le répertoire src et tout ce qui se termine un tilde ou le répertoire ./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$ 

Mon fichier .gitignore est comme suit:

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

Comment puis-je empêcher cela?

+1

Avez-vous envisagé d'utiliser des sous-modules? Ils sont conçus pour ce genre de choses, et un peu plus automatisés ... – Cascabel

+1

Merci pour le commentaire. Subtree a prétendument de nombreux avantages décrits à: http://apenwarr.ca/log/?m=200904#30 –

+0

@D W: C'est juste - les sous-modules sont loin d'être parfaits. Je voulais juste m'assurer que c'était disponible en option. – Cascabel

Répondre

4

Il me semble que tous ces fichiers ignorés ne sont pas réellement dans votre repo - ils sont juste des restes de votre caisse précédente.

Étant donné que vous avez extrait une sous-arborescence de votre projet d'origine, votre fichier .gitignore n'est plus présent. Les fichiers ne sont donc plus "ignorés", vous les verrez donc dans l'état git. Mais ils ne font pas partie de votre repo. ils sont juste assis là. Essayez d'utiliser 'git clean' pour les nettoyer.

+0

Qu'en est-il des éléments d'environnement tels que node_modules ou fournisseur? –

3

Je pense que ce n'est pas quelque chose de vraiment spécifique à git-subtree, vous auriez la même situation si vous basculez entre deux branches et l'un d'eux a généré des fichiers supplémentaires qui étaient en gitignore et l'autre ne sait pas à propos d'eux ... Je dirais que ce comportement de git est plutôt correct, car si j'ajoute un fichier à gitignore, je m'attends à ce qu'il l'ignore complètement et ne fasse rien avec ça - cela inclut aussi de ne pas le supprimer quand vous déplacer vers une branche où il n'est pas gitignored ...

Les façons possibles que vous pouvez traiter ce serait:

  • ajouter les mêmes fichiers aussi au gitignore dans sous-répertoire/sous-projet
  • NETTOYEZ git avant de passer branches
  • ignorer cela, après tout, vous ne ferez probablement pas beaucoup de travail dans la branche qui a été générée par git subtree split autre que de pousser les commits à l'extérieur ... si vous voulez travailler sur le sous-projet séparément, alors peut-être simplement le sous-projet dans un autre répertoire en dehors du principal.
0

Votre fichier .gitignore est le mélange de manière incorrecte avec la syntaxe gitignoregitattributes syntaxe.

Le fichier .gitignore ne doit contenir que des motifs. Des choses comme

*.py diff=python 
*.eps binary 

appartient à la place dans le fichier .gitattributes.