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的資訊以...