GIT-SVN

克隆真正龐大的 SVN 儲存庫

如果你的 SVN repo 歷史非常大,這個操作可能需要幾個小時,因為 git-svn 需要重建 SVN repo 的完整歷史記錄。幸運的是,你只需要克隆一次 SVN repo; 與任何其他 git 儲存庫一樣,你只需將 repo 資料夾複製到其他協作者即可。將資料夾複製到多臺計算機將更快,只需從頭開始克隆大型 SVN 儲存庫。

關於提交和 SHA1

使用命令 git svn dcommit 時,將重寫你的本地 git 提交。此命令將向 git commit 的訊息新增一個文字,該訊息引用在 SVN 伺服器中建立的 SVN 修訂版,這非常有用。但是,新增新文字需要修改現有提交的訊息,而這些訊息實際上無法完成:git 提交是不可變的。解決方案是使用相同的內容和新訊息建立一個新的提交,但從技術上講它是一個新的提交(即 git commit 的 SHA1 將改變)

由於為 git-svn 建立的 git 提交是本地的,因此 git 提交的 SHA1 ID 在每個 git 儲存庫之間是不同的! 這意味著你不能使用 SHA1 引用來自其他人的提交,因為相同的提交將在每個本地 git 儲存庫中具有不同的 SHA1。如果要引用儲存庫的不同副本之間的提交,則在推送到 SVN 伺服器時,需要依賴附加到提交訊息的 svn 修訂號。

你可以使用 SHA1 進行本地操作(顯示/區分特定提交,櫻桃選擇和重置等)

故障排除

git svn rebase 命令發出校驗和不匹配錯誤

命令 git svn rebase 丟擲類似於這樣的錯誤:

  Checksum mismatch: <path_to_file> <some_kind_of_sha1>
  expected: <checksum_number_1>
    got: <checksum_number_2>

解決此問題的方法是在最後一次修改故障檔案時將 svn 重置為修訂版,並執行 git svn fetch 以恢復 SVN 歷史記錄。執行 SVN 重置的命令有:

  • git log -1 - <path_to_file>(複製提交訊息中出現的 SVN 修訂號)
  • git svn reset <revision_number>
  • git svn fetch

你應該能夠再次從 SVN 推送/拉取資料

在提交中找不到檔案當你嘗試從 SVN 獲取或拉取時,你會收到類似於此的錯誤

<file_path> was not found in commit <hash>

這意味著 SVN 中的修訂版試圖修改由於某種原因在本地副本中不存在的檔案。擺脫此錯誤的最佳方法是強制取消忽略該檔案的路徑,它將更新為其在最新 SVN 版本中的狀態:

  • git svn fetch --ignore-paths <file_path>