2011-05-23 112 views
3

爲了在Git和SVN之間創建一個橋樑,允許一個項目的開發人員使用SVN,而另一個項目上的開發人員使用Git,我無意中覆蓋了整個git提交歷史記錄在遠程存儲庫中。以下是導致錯誤的基本工作流程。Git - 意外覆蓋遠程倉庫的整個提交歷史

  1. 克隆遠程Git倉庫
  2. 隨後的一系列命令以導入GIT中回購成SVN的。

    a。我嘗試了使用本地SVN存儲庫作爲測試通過stackoverflow和其他幾個位置找到的各種方法。他們中的大多數都因爲我反對的Git回購而失敗。然而,在http://eikke.com/importing-a-git-tree-into-a-subversion-repository/找到的步驟似乎是成功的,所以那些是我最終使用的。

    b。這只是半成功的。導入到SVN中試圖獲取所有的git commit歷史記錄,並將其作爲SVN提交日誌導入,但在大約2/3的時候失敗。最後三分之一是作爲一個單獨提交被提交到SVN。此外,所有提交日期都被當前日期覆蓋,大部分作者被覆蓋。鑑於這是SVN回購,而不是實際的Git回購,我並不太在意。

  3. 讓某人從SVN簽出代碼,進行更改並提交。
  4. 使用git svn獲取更改
  5. 將更改推送到遠程存儲庫。

最終結果是整個提交歷史記錄被SVN中現在的內容覆蓋。因此,提交日期和作者發生了變化,並且提交歷史的最後三分之一丟失。是否有可能恢復?

如果不是,我找到了在進程中間某個地方創建的本地存儲庫的備份。它似乎具有所有原始提交歷史記錄。是否有可能以某種方式使用本地備份中的內容覆蓋遠程存儲庫上的提交數據?

+2

這是爲什麼關閉主題? – abcd 2011-05-23 18:51:38

回答

1

如果您將更改推送到遠程,您並未真正覆蓋任何內容;畢竟它是版本控制。您應該能夠通過將HEAD重置爲在執行任何操作之前的位置來恢復遙控器的狀態。假設我沒有誤解你做了什麼,你真正需要做的是一樣的東西

git checkout <SHA-of-old-head> 
git add -A 
git commit 
git push 

...,你會回到開始的地方,儘管你的螺桿式將保留在遠程的歷史。如果你不想這樣做,你需要直接在遙控器上工作並將HEAD移回到原來的位置。

+0

事實證明,svn將所有Git提交作爲單獨的SVN提交導入。 * git svn fetch *檢索所有這些提交,* git push *將它們作爲新提交推送到遠程Git存儲庫。這導致了過多的提交看起來像日誌中的原始提交,但實際上是原始文件的重複。這就是爲什麼我認爲歷史被覆蓋了。感謝您的信息,它使我朝着正確的方向前進。 – Adam 2011-05-23 22:01:41