Я - аспирант со многими сценариями, данными библиографии в bibtex, проектом тезиса в латексе, презентациями в открытом офисе, плакатами в scribus, и фигурирую и данные результата. Я хотел бы поместить все в один проект при управлении версиями. Затем, когда я должен работать над частью, такой как данные библиографии, я хотел бы проверить тот подкаталог, изменить его по мере необходимости и объединить его назад. Я хотел бы способность проверить одну версию к моему домашнему компьютеру и другую к моему рабочему компьютеру и внести изменения в каждого независимо и в конечном счете объединить их назад. Я также хотел бы смочь проверить часть кода из этого большого проекта и импортировать его с управлением версиями в отдельный проект. Если бы я могу изменения я хотеть смочь объединить их назад с исходным проектом.
На основе моего понимания поддерево мерзавца может сделать это.
http://github.com/apenwarr/git-subtree
Существует пример, который является вроде того, в чем я пытаюсь сделать:
http://psionides.jogger.pl/2010/02/04/sharing-code-between-projects-with-git-subtree/
Скажите, что соединительная линия моего проекта содержала каталоги: (выпейте мусорное ведро cfg фига данных src todo).
Когда я использую
git subtree split -P bib -b export
git checkout export
Я получаю каталог нагрудника плюс все файлы, которые нужно было проигнорировать или считать двоичным файлом на основе .gitignore, такого как src каталог и все в нем, которое заканчивается в тильде или./данных каталогах.
dwickrama@DWwork:~/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
dwickrama@DWwork:~/research/trunk$
Мой .gitignore файл следующие:
*.doc diff=word
*.tex diff=tex
*.bib diff=bibtex
*.py diff=python
*.eps binary
*.jpg binary
*.png binary
./bin/* binary
*~
Как я предотвращаю это?
Мне кажется, что всех этих игнорируемых файлов нет в вашем репо - они просто остатки от вашей предыдущей проверки.
Поскольку вы извлекли конкретное поддерево из исходного проекта, вашего файла .gitignore больше нет, поэтому файлы больше не «игнорируются», поэтому вы увидите их в статусе git. Но они также не являются частью вашего репо; они просто сидят там.
Попробуйте использовать «git clean», чтобы очистить их.
Я думаю, что это не что-то особенное для git-subtree, у вас была бы такая же ситуация, если бы вы переключились между двумя ветвями, и одна из них сгенерировала дополнительные файлы, которые были в gitignore, а другой не знал бы о их ... Я бы сказал, что такое поведение git довольно правильно, потому что, если я добавлю файл в gitignore, я ожидаю, что он полностью проигнорирует его и не будет с ним ничего делать - в том числе и не удалять его при перемещении в ветку, где это не gitignored ...
Возможные способы решения этой проблемы: