[英]Convert an SVN checkout to use git (git-svn)
我使用保存在 svn 中的軟件進行版本控制。 我想使用 git (git-svn) 但是該軟件需要大量設置和配置才能使用。 有一些工具可以處理所有設置,包括通過 svn 檢查所有代碼。
git-svn 的所有文檔(我已經能夠找到)都需要使用 git-svn 重新結帳。
有沒有辦法轉換現有的 svn checkout 以便它可以使用 git-svn?
不,一個 git-svn 克隆將整個存儲庫轉換為 git。 SVN 簽出沒有整個存儲庫,因此無法從中克隆。 這是從 SVN 或 CVS 切換到分布式系統(如 git)的主要優勢。
你可以這樣做:
我假設您可能想保留歷史記錄。 但是,如果您(或任何其他偶然發現此頁面的人)不需要歷史記錄,您可以使用此處解釋的“導出”功能: https ://stackoverflow.com/a/419475/2437521。
另一種不修改原始 Subversion 工作副本且不需要您復制它的方法是使用補丁:
git reset --hard :/r<revision>
強制它在克隆后成為相同的修訂版,其中<revision>
是 Subversion 工作副本更新到的修訂版(請參閱此處使用svn info
)。cd
到您的 Subversion 工作副本。svn status
確保所有新文件都標記為A
(或使用svn add
添加它們),並且所有已刪除的文件都標記為D
(或使用svn rm
刪除它們)。svn diff >patch.diff
創建補丁文件。patch.diff
復制到之前創建的 Git 存儲庫的頂部。cd
到之前創建的 Git 存儲庫的頂部。git apply -p0 patch.diff
以將補丁應用到 Git 存儲庫的工作樹上。 現在您可以使用git status
完成更改,然后git add
/ git commit
它們保存在本地存儲庫中。
這似乎有效:
(警告:我沒有對此進行足夠的測試。請在嘗試之前進行備份。)
用當前的 SVN URL 初始化 git-svn:
git svn init $(svn info --show-item=url)
獲取 Git 的 SVN HEAD。 不幸的是,這會下載 HEAD 而不是使用本地結帳,但它只下載到.git
。
git svn fetch -r HEAD
git-svn fetch 會抱怨類似
錯誤:未跟蹤的工作樹文件“”將被合並覆蓋。
但是當前提交將對應於 SVN HEAD。 工作目錄將保留在原處。
暫存區現在包含 SVN HEAD; 取消它。
git reset HEAD -- .
存儲庫的狀態現在應該與您執行git svn clone -r HEAD <URL>
然后在頂部應用您的更改相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.