日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目如何从 SVN 迁移到 Git

發(fā)布時(shí)間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目如何从 SVN 迁移到 Git 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

#0 系列目錄#

  • 版本管理
  • SVN版本管理:場景命令實(shí)戰(zhàn)
  • SVN版本管理:兩種開發(fā)模式
  • GIT版本管理:場景命令實(shí)戰(zhàn)
  • GIT版本管理:Git Flow模型
  • 項(xiàng)目如何從 SVN 遷移到 Git

很多有點(diǎn)歷史的項(xiàng)目,都是用的 Subversion 作為版本控制工具的,隨著項(xiàng)目需要,很多團(tuán)隊(duì)就打算采用 Git 作為替代工具了。好,現(xiàn)在問題來了:項(xiàng)目如何平滑的從 Subversion 遷移到 Git。

這里所謂的遷移是按照版本控制要求來遷移,包括:

盡可能完整的由誰提交的代碼、做出的代碼變更記錄,提交日志等。

盡可能完整的分支、標(biāo)簽等。

因?yàn)楫吘故遣煌陌姹究刂乒ぞ?#xff0c;轉(zhuǎn)化過程難免會(huì)有瑕疵。

#1 準(zhǔn)備環(huán)境# 安裝用到的工具的軟件包,這里以 Ubuntu 為例:

$ sudo apt-get install subversion git $ sudo apt-get install git-core libsvn-perl perl libterm-readkey-perl

#2 規(guī)范 Subversion# 確認(rèn)項(xiàng)目的 Subversion 地址:

# 后面統(tǒng)一用 $PROJECT 表示項(xiàng)目的 Subversion 地址 # 這里的示例項(xiàng)目名稱是 west https://scms.example.com/svn/projects/west/

規(guī)范項(xiàng)目在 Subversion 的目錄結(jié)構(gòu):

標(biāo)準(zhǔn)的 trunk、branches、tags 目錄布局。

branches 和 tags 目錄下的分支和標(biāo)簽保持平級(jí),例如:

tags/v1.0.0 可以。

tags/1.x/v1.0.0 多了層目錄就不可以。

如果不是平級(jí),以 tags 為例,先執(zhí)行 svn mv 操作。

方式 1 - 遠(yuǎn)程 svn mv

$ svn mv $PROJECT/tags/1.x/v1.0.0 $PROJECT/tags/v1.0.0

方式 2 - 本地 svn mv

$ svn co $PROJECT west_subversion $ cd west_subversion $ svn mv tags/1.x/v1.0.0 tags/v1.0.0

最后規(guī)范后的目錄示例如下:

west ├── trunk │ ├── docs │ ├── west │ ├── setup.py │ └── README.rst ├── branches │ ├── hotfix_add_user_error │ ├── hotfix_issuse_9527 │ ├── feature_unittest4app │ └── feature_multi_add_user └── tags├── v1.0.0├── v1.0.1├── v2.0.0└── v2.1.0

#3 生成提交者 ID 和郵箱#

  • example.com代表組織的郵箱,比如:knownsec.com
  • 但如果個(gè)人郵箱不是統(tǒng)一的組織的話,就需要手工編輯 users.txt 了

svn log $PROJECT --xml | grep -P "^<author" | \sort -u | perl -pe 's/<author>(.*?)</author>/$1 = $1 <$1@example.com>/' > users.txt

#4 遷出項(xiàng)目代碼(git svn)#

git svn clone $PROJECT --authors-file=users.txt --no-metadata --localtime --stdlayout

--authors-file 是得到的 git log 提交記錄映射好提交者的信息;

--no-metadata 是得到的 git log 不帶上對(duì)應(yīng)的 Subversion 信息了,更干凈;

--localtime 是得到的 git log 以本地時(shí)間為準(zhǔn),建議用上;

--stdlayout 是先前準(zhǔn)備的按規(guī)范目錄風(fēng)格來遷出代碼;

#5 轉(zhuǎn)化成Git的倉庫格式(tags 和 branches)# 處理 tag:

git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done

處理 branch:

git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done

#6 一些清理工作# 由于這個(gè)轉(zhuǎn)化會(huì)將及歷史上的 branches 和 tags 也都生成一個(gè) Git 的分支和標(biāo)簽,所以還是得清理下你認(rèn)為不用的分支和標(biāo),可能包括:

Subversion 歷史上錯(cuò)誤的 tags。

Subversion 歷史上臨時(shí)的 branches。

冗余的 trunk 分支(其實(shí)跟轉(zhuǎn)化后的 Git master 分支一樣)。

#7 添加到遠(yuǎn)程 Git 倉庫#

  • 比如:GitHub 上創(chuàng)建項(xiàng)目 west
  • 添加本地 Git 項(xiàng)目到剛創(chuàng)建的遠(yuǎn)程 Git 倉庫
git remote add origin git@github.com:akun/west.git git push origin --all git push origin --tags

#8 完成遷移# 這樣,可以直接在 Git 下來繼續(xù)你的項(xiàng)目了。

git clone git@github.com:akun/west.git

#9 遺留問題# 上述方式轉(zhuǎn)化其實(shí)還有瑕疵,比如:

Subversion 允許空目錄,轉(zhuǎn)化 Git 用 git svn,處理空目錄帶上 --preserve-empty-dirs 可能會(huì)報(bào)錯(cuò),不處理,可能項(xiàng)目的程序原先依賴空目錄的處理就得修改。

類似 svn:externals,svn:ignore,svn:merge 等屬性丟失

不過問題不大,可以接受,Subversion 遷移 Git 算是基本平滑遷移。

轉(zhuǎn)載于:https://my.oschina.net/xianggao/blog/667048

總結(jié)

以上是生活随笔為你收集整理的项目如何从 SVN 迁移到 Git的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。