This question взял меня часть пути, но я все еще что-то пропустил.Как скрыть репозиторий Git?
У меня есть однопользовательский репозиторий (поэтому нет проблем с переписыванием истории и push/pull), где я разработал код продукта и код поддержки и документы вместе.
После работы года или около того я наконец увидел свет и хочу разделить свое репо на две части. Это то, что я пробовал:
- Создайте два новых каталога под корнем проекта; давайте назовем их Project/Код и/Проект/Поддержка/
- GIT мВ весь код материала в код/
- мерзавец мв все Support материал в поддержку/
- копировать и изменять .gitignore соответственно
- совершить все
Теперь, когда я бегу, что я думал, правильную команду:
git filter-branch -d /cygdrive/z/temp/ --subdirectory-filter Code/ -- --all
Я просто получить отдельностоящий ветвь с одна фиксация, моя оригинальная ветка все еще существует (как original/refs/head/brent
), и все остальные ветви такие же, как и они.
Что мне действительно нужно, так это переписать историю, как если бы код/каталог был «всегда там», а Support/stuff - нет, и наоборот для другой стороны.
Я родственник Git нуб, так что я уверен, что я пропустил некоторые важные концепции - пожалуйста, заполните меня в
ОК, я сделал это, и это, кажется. делай то, что мне нужно очень хорошо, за что большое спасибо. У меня есть несколько дополнений:
Я добавил a -r, чтобы разрешить удаление полных каталогов. Это верно? Фактическая команда, которую я использовал, был:
GIT-фильтра-ветви --index-фильтр \
'мерзавца погонных -r --cached --ignore-unmatch' \
- --all- у хранилища теперь примерно столько же, сколько и ожидалось. Они появляются в gitk как привязанные назад от вещи с именами как «оригинал/refs/heads/TestSys».
Я предполагаю, что это оригинальное дерево фиксации; как я могу избавиться от них? Они не появляются в fsck, и ни чернослив, ни gc-aggressive не избавляются от них.
Uh-oh, просто прочитайте точное руководство; собирается попробовать git clone, чтобы обрезать крутой.
ОК, теперь я сделал клон, и хранилище сократилось до первоначального размера.Клон, казался, только скопировать филиальную информацию для текущих (источника репо) ГОЛОВ, и я должен был настроить другие ветви вручную с этим:
for n in `git branch -r|grep -v 'HEAD'` ; do git branch ${n/origin?/} $n ; done
Есть простой способ сделать это во время клона?
Плюс это: я не хочу казаться неблагодарным, но теперь есть «пустые» коммиты, которые использовались только для того, чтобы касаться файлов, которые теперь исчезли.
Есть ли простой способ их устранения?
Действительно благодарен вам за помощь и терпение.