This question把我的一部分,但我仍然失去了一些東西。如何分離一個Git倉庫乾淨?
我有一個單用戶存儲庫(所以在重寫歷史記錄與推/拉時沒有問題),我已經開發了產品代碼並支持代碼和文檔。
經過一年多的工作,我終於看到了光明,並希望將我的回購分爲兩部分。這是我試過的:
- 在項目根目錄下創建兩個新目錄;讓我們稱他們爲項目/代碼和/工程/支持/
- 混帳MV所有代碼的東西到Code/
- 混帳MV所有支持的東西到支持/
- 複製和修改的.gitignore適當
- 承諾一切
現在,當我運行了我認爲正確的命令:
git filter-branch -d /cygdrive/z/temp/ --subdirectory-filter Code/ -- --all
我只是得到一種超然分支一個單一的提交,我的原始分支仍然在那裏(如original/refs/head/brent
),而其他所有分支都是原樣。
我真正需要的是重寫歷史,就好像代碼/目錄是「永遠存在」,而Support/stuff不是,反之亦然。
我是一個相對的Git小白,所以我敢肯定,我已經錯過了一些重要的概念 - 請填寫我
OK,我做到了這一點,而且它似乎。做我所需要的,非常感謝。我有一對夫婦補充問題:
我加了-r以允許移除完整的目錄。它是否正確?我實際使用的命令是:
git的過濾分支--index過濾器\
'git的RM -r --cached - 忽略的不匹配' \
- - 所有- 的倉庫現在的提交次數大約是我預期的兩倍。這些在gitk中顯示爲與名稱爲「original/refs/heads/TestSys」的東西鏈接在一起。
我假設這些是原始提交樹;我如何擺脫它們?他們不會出現在fsck中,修剪和gc - agressive都不能擺脫他們。
嗯,哦,只是讀了精細的手冊;去嘗試git克隆來修剪cruft。
好的,現在我已經完成了克隆,並且存儲庫已縮小到原始大小。克隆似乎只是複製的分支信息當前(源回購)頭,我不得不手動設置其他分支機構與此:
for n in `git branch -r|grep -v 'HEAD'` ; do git branch ${n/origin?/} $n ; done
有沒有一種簡單的方法,在克隆的時間來做到這一點?
加上這個:我不希望看起來忘恩負義,但現在有「空」提交,它只用於觸摸現在已經消失的文件。
有沒有簡單的方法來消除這些?
非常感謝您的幫助和耐心。