2010-08-20 2 views
2

This question взял меня часть пути, но я все еще что-то пропустил.Как скрыть репозиторий Git?

У меня есть однопользовательский репозиторий (поэтому нет проблем с переписыванием истории и push/pull), где я разработал код продукта и код поддержки и документы вместе.

После работы года или около того я наконец увидел свет и хочу разделить свое репо на две части. Это то, что я пробовал:

  1. Создайте два новых каталога под корнем проекта; давайте назовем их Project/Код и/Проект/Поддержка/
  2. GIT мВ весь код материала в код/​​
  3. мерзавец мв все Support материал в поддержку/
  4. копировать и изменять .gitignore соответственно
  5. совершить все

Теперь, когда я бегу, что я думал, правильную команду:

git filter-branch -d /cygdrive/z/temp/ --subdirectory-filter Code/ -- --all 

Я просто получить отдельностоящий ветвь с одна фиксация, моя оригинальная ветка все еще существует (как original/refs/head/brent), и все остальные ветви такие же, как и они.

Что мне действительно нужно, так это переписать историю, как если бы код/​​каталог был «всегда там», а Support/stuff - нет, и наоборот для другой стороны.

Я родственник Git нуб, так что я уверен, что я пропустил некоторые важные концепции - пожалуйста, заполните меня в


ОК, я сделал это, и это, кажется. делай то, что мне нужно очень хорошо, за что большое спасибо. У меня есть несколько дополнений:

  1. Я добавил a -r, чтобы разрешить удаление полных каталогов. Это верно? Фактическая команда, которую я использовал, был:

    GIT-фильтра-ветви --index-фильтр \
    'мерзавца погонных -r --cached --ignore-unmatch' \
    - --all

  2. у хранилища теперь примерно столько же, сколько и ожидалось. Они появляются в 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 

Есть простой способ сделать это во время клона?

Плюс это: я не хочу казаться неблагодарным, но теперь есть «пустые» коммиты, которые использовались только для того, чтобы касаться файлов, которые теперь исчезли.

Есть ли простой способ их устранения?

Действительно благодарен вам за помощь и терпение.

ответ

3

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

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <list of files that shouldnt be here>' -- --all 
Смежные вопросы