![](/img/trans.png)
[英]Migrating a svn repository without trunk to git using reposurgeon
[英]Convert an SVN repository to git with reposurgeon without creating .gitignore files?
我使用reposurgeon將我的svn轉換為git存儲庫:( 如何使用reposurgeon將svn repo轉換為git? )。
問題是,轉換的標簽在我創建標簽時的日志中顯示,而不是在它們所屬的修訂位置。 在SVN中,無論我多久創建它們,它們都會顯示在它們所屬的日志中的正確位置。
似乎這必須做一些事情,reposurgeon在每個標簽中添加.gitignore的提交,如下所示:
# A simulation of Subversion default ignores, generated by reposurgeon.
*.o
*.lo
...
*.pyo
*.rej
*~
.#*
.*.swp
.DS_store
# The contents of the svn:ignoreproperty on the branch root.
*~
nbproject
*.project
如何讓reposurgeon不在所有標簽中為gitignore創建這樣的提交? 並讓它創建簡單的標簽,這些標簽不作為提交出現在時間軸中?
用戶生成的.gitignore
此消息表示reposurgeon在其正在分析的Subversion存儲庫中找到.gitignore文件。 這可能是因為有人使用git-svn作為實時網關,並且創建了忽略,這些忽略可能與生成的.gitignore文件中的那些一致,也可能不會與Subversion忽略屬性將被轉換為。 您需要做出關於在轉換中使用哪組忽略的策略決策,並可能刪除生成的.gitignore文件或用戶創建的文件。
但沒有例子如何做出這個決定。 我該怎么辦呢?
您需要做出關於在轉換中使用哪組忽略的策略決策,並可能刪除生成的.gitignore文件或用戶創建的文件。
轉換前你有.gitignore嗎? 如果是這樣,那就與之后的那個相比較。 看來這個政策決定與你的“提交順序”問題是分開的,對嗎? 基本上,政策問題只是“獲得你喜歡的最終.gitignore”。 做到達到目的所需的一切。
在git中,.gitignore文件的管理方式與任何其他文件完全相同。 所以你可以說git log .gitignore
並查看提交內容的貢獻。 假設整個.gitignore文件在一個塊10提交之前提交,你希望它分開。 如果是這樣,你可以做一個git rebase --interactive HEAD~11
並編輯有問題的提交。 做git add --partial .gitignore; git commit
你想要分解的每一行的git add --partial .gitignore; git commit
。 然后git rebase --continue
繼續結束。
如果您希望每個新的逐項提交都是它們對應的更大代碼提交的一部分,那么您將再次使用-i來轉換訂單並使用其合作伙伴提交壓縮它們。 如果這聽起來像不必要的工作,它可能是。 如果可以,我建議你專注於回購的最終狀態的完整性,而不是完美的歷史表達。
注意:我不理解你在這種情況下使用術語“標簽”,因為SVN和git都有“標簽”,但你似乎也沒有提到。 也許“忽視線”或“進入”會更清楚。
在版本控制中清除歷史記錄是有問題的。 所有分支上改變歷史是有效地創建一個新的存儲庫,因為不再有連續性,下游的追隨者什么 (每個人都必須重訂)。 但是如果你想這樣做,對於每個分支,找到文件系統中的所有.gitignores,看看提交的內容是什么:
git log `find . -name .gitignore`
然后你可以執行上面描述的rebase --interactive步驟來改變那些提交。 如果提交僅影響.gitignore,則可以將其刪除。 但很明顯,如果提交涉及100個文件,包括.gitignore,你必須將好處與壞處分開。
或者,如果您知道所有.gitignore文件的路徑(簽出每個分支並從上面運行查找 ),那么您可以執行類似github與filter-branch記錄的操作 :
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .gitignore path/to/other/.gitignore' \
--prune-empty --tag-name-filter cat -- --all
他們還提到了一個BFG java工具,但filter-branch應該做你需要的。
在您的subversionrepository中讀取后,只需添加:
expunge /gitignore/
這將刪除reposurgeon自動添加的所有.gitignore文件。
我從來沒有使用reposurgeon,但我已經使用內置的git svn ...
命令將許多svn存儲庫轉換為git。 我已經關注了http://trac.parrot.org/parrot/wiki/git-svn-tutorial和http://john.albin.net/git/convert-subversion-to-git上的指南 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.