2016-09-08 4 views
1

Пусть говорят, что я это сделать:мерзавец - начать отслеживать неотслеживаемые удаленные файлы/каталоги

mkdir some_repo 
cd some_repo 
git init 
git touch dummy.txt 
git commit -m 'dummy commit' 
git remote add -f some_other_remote_repo path/to/.git 
git merge --no-ff --no-commit merge remotes/some_other_remote_repo/master 

Нет ввода git status я вижу что-то вроде:

new: f1/some.txt 
new: f1/some11.txt 
new: f2/some2.txt 
new: f3/some3.txt 

Так что теперь я только хочу добавить определенные каталоги и их содержание. Я могу это сделать:

git reset f2/ 
git reset f3/ 

сейчас работает git status:

new: f1/some.txt 
new: f1/some11.txt 

untracked: f2/some2.txt 
untracked: f3/some3.txt 

Так это то, что мне нужно, и я могу совершить и удалить локально добавлены f2 и f3 каталоги. Но что делать, если позже я решил, что теперь хочу отследить, например, каталог f2 и его содержимое?

Нет, если я снова запустил git merge --no-ff --no-commit merge remotes/some_other_remote_repo/master, он скажет, что все в актуальном состоянии. Так что теперь он игнорирует эти неподготовленные каталоги. Это их способ сказать git отслеживать конкретные каталоги, которые находятся только в удаленном режиме?

+0

Здесь стоит упомянуть, что Git не отслеживает каталоги как таковые. Вместо этого, если во время проверки Git необходимо создать некоторый каталог 'f1', чтобы иметь файл' f1/some.txt', он просто делает это; и при переходе от commit X к фиксации Y, если commit X имеет 'f1/some.txt' и commit Y ничего не имеет в' f1', а 'f1' становится пустым, Git стремится удалить' f1'. (Я видел много угловых случаев за годы, когда Git не удаляет пустые каталоги, поэтому вы не должны слишком много учитывать это второе поведение.) – torek

+0

@torek да, я понимаю. Я сам это заметил. Хотя в моем случае каждый подкаталог является модулем. Таким образом, весь каталог должен быть включен или исключен. – Andrius

ответ

2

Решение

Объединить дистанционную ветку снова. Это втягивает файлы (снова).

Отказ от ответственности

Я считаю это очень плохой практикой. После вашего первого слияния с удаленными файлами у вас есть успешное объединение в вашей истории git, но это явно не так.

Рекомендация

Вместо этого вы должны создать новую ветку some_feature поверх remote/master, удалить эти файлы, а затем объединить some_feature. Если вы решите, что хотите все файлы, полностью слейте remote/master.

Если файлы some.txt, some1.txt, ... все добавлены в разные коммиты, вы можете также вишни-выбрать те коммиты, если их всего лишь несколько.

+0

Мне действительно нравится ваша рекомендация. Это дает больший контроль. Я попробую это. Благодарю. – Andrius

Смежные вопросы