Git поддерево неправильно использует .gitignore при выполнении частичного клона - PullRequest
7 голосов
/ 24 марта 2010

Я аспирант со многими сценариями, библиографическими данными в bibtex, черновиком диссертации в латексе, презентациями в открытом офисе, плакатами в scribus, а также рисунками и данными о результатах. Я хотел бы поставить все в одном проекте под контролем версий. Затем, когда мне нужно поработать над частью, такой как библиографические данные, я хотел бы проверить этот подкаталог, изменить его при необходимости и объединить обратно. Я хотел бы иметь возможность проверить одну версию на моем домашнем компьютере и отличается от моего рабочего компьютера и вносит изменения в каждый из них независимо и в конечном итоге объединяет их. Я также хотел бы иметь возможность извлечь фрагмент кода из этого большого проекта и импортировать его с версионированием в отдельный проект. Если бы я мог внести изменения, я бы хотел объединить их с первоначальным проектом.

Исходя из моего понимания, Git поддерево может сделать это.

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

Есть пример того, что я пытаюсь сделать по адресу:

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

Скажем, ствол моего проекта содержал каталоги: (bib bin cfg data fig src todo).

Когда я использую

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

Я получаю каталог bib плюс все файлы, которые должны были игнорироваться или считаться двоичными на основе .gitignore, такие как каталог src и все, что в нем заканчивается тильдой или ./data каталог.

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
*~

Как мне предотвратить это?

Ответы [ 3 ]

4 голосов
/ 24 марта 2010

Мне кажется, что все эти проигнорированные файлы на самом деле не находятся в вашем репо - они просто остатки от вашей предыдущей проверки.

Поскольку вы извлекли определенное поддерево из своего исходного проекта, ваш файл .gitignore больше не присутствует, поэтому файлы больше не "игнорируются", поэтому вы увидите их в состоянии git. Но они также не являются частью вашего репо; они просто сидят там.

Попробуйте использовать 'git clean', чтобы очистить их.

3 голосов
/ 08 мая 2010

Я думаю, что это не является чем-то особенным для git-subtree, у вас будет такая же ситуация, если вы переключаетесь между двумя ветками, и одна из них генерирует несколько дополнительных файлов, которые находятся в gitignore, а другая не знает о они ... я бы сказал, что это поведение git довольно корректно, потому что, если я добавлю файл в gitignore, я ожидаю, что он полностью проигнорирует его и ничего с ним не сделает - это включает в себя также не удаление его при перемещении в ветку, где это не gitignored ...

Возможные способы решения этой проблемы:

  • добавить те же файлы в gitignore в подкаталоге / подпроекте
  • сделайте git clean перед тем, как переключать ветки
  • просто проигнорируйте это, в конце концов, вы, вероятно, не будете выполнять большую часть работы в ветке, которая была сгенерирована git subtree split, кроме отправки коммитов наружу ... если вы хотите работать с подпроектом отдельно, тогда, возможно, просто извлеките сам подпроект в другом каталоге, кроме основного.
0 голосов
/ 27 марта 2014

Ваш .gitignore файл неправильно смешивает gitignore синтаксис с gitattributes синтаксис.

Файл .gitignore должен иметь только шаблоны. Вещи как

*.py diff=python
*.eps binary

принадлежит в файле .gitattributes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...