svn倉庫分模組遷移到git倉庫

2021-10-05 07:16:54 字數 3104 閱讀 5971

git專案跟蹤到子模組倉庫

參考鏈結

公司要求將現有svn伺服器上的專案全部遷徙到gitlab伺服器上由運維部門統一管理。剛開始也是網上找資料,網上關於這方面文章非常多,找了幾篇比較寫的詳細文章按照步驟一步一步做,最後都沒有成功,主要原因網上文章都是很早之前寫的,有些命令在新版git上面執行出錯,另外我們的專案很大,裡面包含很多個子模組,由不同開發部門人員開發和維護,以前svn只需要開放對應目錄給相關部門開發人員即可,現在如果不拆分出來就要把整個專案許可權放開,非常不安全。經過自己大量摸索,找到一條行之有效的方法,現記錄下來提供給需要的人參考下。

本文包括專案整體遷徙和按模組遷徙兩個部分,如果不需要按模組遷徙後面部分可以忽略。

獲取svn倉庫**提交者資訊

svn log -q |

awk -f '|'

'/^r/ '

|sort -u > authors-transform.txt

修改提交者郵箱位址

開啟authors-transform.txt檔案,修改括號裡面內容為郵箱位址,如:

修改前:visualsvn server = visualsvn server

修改後:visualsvn server = visualsvn server

獲取svn倉庫檔案過濾配置資訊

git svn show-ignore --id=origin/trunk > .gitignore
用git命令轉殖svn專案(可能需要安裝git-svn)

git svn clone  --no-metadata --trunk=trunk --tags=tags --branches=branches --a authors-transform.txt --no-minimize-url [-r72:head]

#引數–no-metadata表示阻止git匯出svn包含的一些無用資訊

#引數–authors-file表示svn賬號對映到git賬號檔案,所有svn作者都要做對映(這裡使用-a 指定)

#引數–trunk表示主開發專案

#引數–branches表示分支專案

#引數-r表示版本 例如上述-r72:head表示從之前svn專案的版本72以後的開始同步,包括內容和commit日誌,如果要所有的svn記錄都同步則改為-r2:head(不過此時會比較耗時,因此建議按需設定)

建立本地分支,不要帶–track(下面命令執行出錯的話可能是跟蹤的遠端分支名字不對,git轉殖的svn倉庫跟蹤別名和git遠端倉庫不一樣,可以試試直接用commit id或者tortoise工具建立)

git show-ref

git checkout -b br1 origin/br1

git checkout -b br2 origin/br2

第六步 向本地git倉庫對應分支分別新增.gitignore和readme檔案。如果不需要拆分子模組分別推送到不同git倉庫,到這一步就可以本地倉庫基本好了,後面就是遠端建立乙個空倉庫,本地倉庫push到遠端的空倉庫即可。

git push -u github-repo-name --all該部分內容包括建立子模組倉庫和git專案跟蹤到建立子模組倉庫兩塊。

兩種方式相同點是一次只能建立乙個分支的子模組,專案有多少個分支需要重複做多少次。建立好子模組分支後,按分支乙個乙個推送到遠端git子模組倉庫。

第一種方式

第二種方式

在同步好的本地git倉庫建立分支提取出子模組**,建立好的子模組分支只對應整個專案的單個分支,專案存在多個分支需要到每個分支上建立子模組分支提取子模組**。這種方式也有兩種操作方法對應

方法一適用於svn提交**都是分模組提交,如果一次提交多個模組,這樣匯出來的子模組攜帶有其他子模組**,還有單獨去刪除。

cd repository-name

git filter-branch --prune-empty --subdirectory-filter folder-name branch-name

方法二簡單些,建立的子模組分支乾淨,提交資訊不包含其他模組跟蹤檔案

cd lib-repo

git subtree split --prefix=lib -b split

git push ~/lib-repo split:master

git子模組倉庫建立好之後,把轉殖好的git本地倉庫對應分支下面的子模組目錄刪除,然後新增子模組引用。這裡假設上面子模組路徑為「src/submodule_folder」,建立好的遠端子模組倉庫為「[email protected]:account/sub-repo.git」。

git

rm -r src/submodule_folder

git commit -m "remove submodule forlder."

.git submodule add -b master --name sub-origin-master [email protected]:account/sub-repo.git src/submodule_folder

git commit -m "add submodule 'sub-origin-master'."

切換到分支重複上一步操作

git checkout br1

git commit -m "remove submodule forlder."

.git submodule add -b br1 --name sub-origin-br1 [email protected]:account/sub-repo.git src/submodule_folder

git commit -m "add submodule 'sub-origin-br1'."

把所有子模組都新增進去之後,再把專案推送到遠端空倉庫就可以了。

svn倉庫遷移到git倉庫

1.安裝git,安裝svn命令列工具 安裝svn時勾選選項 並安裝git bash,開啟git bash 2.svn log q awk f r sort u users.txt 這個時候,應該在我們的svn目錄內生成了乙個users.txt檔案,內容大致是這樣子的 注意一定要收集到所有提交者,如果...

從SVN遷移到git倉庫

1.將svn中的專案拷貝到本地 git svn clone svn位址 本地資料夾名稱 git svn clone svn localprojectname2.去到本地路徑 cd localprojectname3.建立遠端倉庫 git remote add 倉庫名稱 遠端倉庫位址 首先要在遠端倉庫...

svn遷移到git倉庫的方案

svn遷移到git倉庫並保留commit歷史記錄 最近公司要求將 庫從svn遷移到gitlab,由於之前一直是由svn做版本控制。最簡單的方式是將svn的內容export出來,然後新增到gitlab即可。但是,如果svn用的時間很長了,而且很多commit,所以就希望儲存svn commit的資訊以...