p1、查询端口号占用,根据端口查看进程信息/p
2017年6月份的時(shí)候,我就著手在公司推廣git,首先我自己嘗試搭建了GitLab來管理代碼,并且通過以下博客記錄了GitLab的搭建,以及GitLab備份,GitLab升級(jí)等事情。
- git學(xué)習(xí)——>在CenterOS系統(tǒng)上安裝GitLab并自定義域名訪問GitLab管理頁面
- git學(xué)習(xí)——>如何漢化GitLab?
- (轉(zhuǎn))git學(xué)習(xí)——>Git 分支管理最佳實(shí)踐
- git學(xué)習(xí)——> Gitlab如何進(jìn)行備份恢復(fù)與遷移?
- git學(xué)習(xí)——> 解決Gitlab 版本升級(jí)之后,發(fā)送 merge request 出現(xiàn) http 500 的返回碼錯(cuò)誤
- Git學(xué)習(xí)–>如何通過Shell腳本自動(dòng)定時(shí)將Gitlab備份文件復(fù)制到遠(yuǎn)程服務(wù)器?
- Git學(xué)習(xí)–>如何通過Shell腳本實(shí)現(xiàn) 監(jiān)控Gitlab備份整個(gè)過程并且通過郵件通知得到備份結(jié)果?
- Git學(xué)習(xí)–>關(guān)于Jenkins編譯時(shí)候,如何獲取Git分支的當(dāng)前分支名?
- Git學(xué)習(xí)–>GitLab如何屏蔽掉注冊功能?
- Git學(xué)習(xí)–>GitLab如何修改時(shí)區(qū)?
但是關(guān)于從SVN遷移到Git的具體操作到是沒有記錄下來,只記錄了一份博客。
- git學(xué)習(xí)——>從SVN遷移到Git之后,項(xiàng)目開發(fā)代碼繼續(xù)在SVN提交,如何同步遷移之后繼續(xù)在SVN提交的代碼到Git?
現(xiàn)在想想,今年年初的時(shí)候,我們部門的軟件代碼已經(jīng)全部成功遷移到了GitLab上,管理的項(xiàng)目已經(jīng)達(dá)到300+,GitLab成員已經(jīng)達(dá)到100+,Group分了60+來進(jìn)行管理,整個(gè)管理起來有條不紊的,權(quán)限分配的都很合理。
現(xiàn)在我們來講一講,去年是怎么從SVN遷移到Git的,可能很多人這一步都很難走對(duì)。因?yàn)槟阋w移過來,但是又不能將原來的SVN的commit記錄丟失,所以得用一套比較靠譜的方案。當(dāng)時(shí)我自己用我自己的一份代碼做好了遷移test之后,輸出了一份《SVN項(xiàng)目遷移到Git操作指南》,然后將每個(gè)項(xiàng)目小組的組長包括Android、IOS、Html5等組長都培訓(xùn)了一輪之后,大家都成功的將已有的SVN項(xiàng)目遷移到了GitLab上,后續(xù)的新項(xiàng)目都直接在GitLab上新建了。
下面以網(wǎng)易云音樂為例,記錄SVN代碼倉庫遷移到GitLab倉庫的過程。
參考鏈接
在遷移的過程中,參考了以下的鏈接:
-
git與svn 共舞
-
走進(jìn)git時(shí)代系列二》 從SVN遷移到GIT教程
-
SVN遷移到Git的過程(+一些技巧)
-
svn 遷移到git下全過程
-
將代碼庫從 SVN 遷移至 Git 并保留所有 commit 記錄
-
Git 與其他系統(tǒng) - 遷移到 Git
-
從SVN遷移代碼到Git實(shí)踐總結(jié)
第一步、建立SVN用戶到git用戶的映射文件
在 Subversion,每個(gè)提交者在都在主機(jī)上有一個(gè)用戶名,記錄在提交信息中。如果想讓已有的信息更好的映射到 Git 作者數(shù)據(jù)里,則需要 從 Subversion 用戶名到 Git 作者的一個(gè)映射關(guān)系,因?yàn)镚it是用郵箱來標(biāo)識(shí)一個(gè)提交者的。建立一個(gè)叫做?userinfo.txt?的文件,每行一條svn作者 = 作者昵稱 <郵箱地址>,用如下格式表示映射關(guān)系:
因?yàn)榫W(wǎng)易云音樂這個(gè)項(xiàng)目有ouyangpeng和huxiaoqiao的提交記錄,所以u(píng)serinfo.txt內(nèi)容如下所示:
ouyangpeng = ouyangpeng <ouyangpeng@oaserver.dw.gdbbk.com> huxiaoqiao = huxiaoqiao <huxiaoqiao@oaserver.dw.gdbbk.com>- 1
- 2
現(xiàn)在SVN代碼的文件中,使用如下命令獲取到所有提交者的名字。
SVN代碼的所有提交者的作者名可以通過以下命令獲得:
獲取svn提交的作者名
svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt- 1
得到以下文本,然后根據(jù)以上的格式編輯作者的郵件信息等。
lihongmeng liyang wangshuyin wuqi youpeng ouyangpeng- 1
- 2
- 3
- 4
- 5
- 6
這樣我們的把有svn的提交記錄的作者、郵箱userinfo.txt都準(zhǔn)備好了,接下來就克隆svn的地址。
lihongmeng = lihongmeng <lihongmeng@oaserver.dw.gdbbk.com> liyang = liyang <liyang@oaserver.dw.gdbbk.com> wangshuyin = wangshuyin <wangshuyin@oaserver.dw.gdbbk.com> wuqi = wuqi <wuqi@oaserver.dw.gdbbk.com> youpeng = youpeng <youpeng@oaserver.dw.gdbbk.com> ouyangpeng = ouyangpeng <ouyangpeng@oaserver.dw.gdbbk.com>- 1
- 2
- 3
- 4
- 5
- 6
第二步、通過git svn clone克隆一個(gè)git版本庫,SVN里面包含trunk,branches和tags。
SVN版本庫的內(nèi)容如下所示:
把上面的userinfo.txt 拷貝到 新建好的準(zhǔn)備克隆svn代碼的git目錄下,?
然后執(zhí)行?git svn clone命令克隆一個(gè)git版本庫
- 1
- 參數(shù)–no-metadata表示阻止git導(dǎo)出SVN包含的一些無用信息
- 參數(shù)–authors-file表示SVN賬號(hào)映射到git賬號(hào)文件,所有svn作者都要做映射
- 參數(shù)–trunk表示主開發(fā)項(xiàng)目
- 參數(shù)–branches表示分支項(xiàng)目
敲完命令后,會(huì)要求填寫SSH相關(guān)信息,填寫好svn的賬戶名和密碼 即可繼續(xù)執(zhí)行。
填寫用戶名
填寫密碼
填寫完畢后,回車則會(huì)開始執(zhí)行clone操作。
執(zhí)行過程中,在不斷的從svn服務(wù)器拉取代碼到本地git版本庫
使用git log?命令查看轉(zhuǎn)換好的代碼庫,可以看到歷史記錄
widgetPhone的提交歷史記錄如下:
這個(gè)時(shí)候執(zhí)行* git branch*?命令發(fā)現(xiàn)只有 master一個(gè)分支。
但是實(shí)際上我有好幾個(gè)分支,?
APP_NetEaseCloudMusic_SearchSongs?,?
APP_NetEaseCloudMusic_UseByAnonymous,?
App_NetEaseCloudMusic_V0.1_backup
執(zhí)行命令?git show-ref可以看到所有的引用,如下所示,?
可以看到有master這個(gè)本地分支,同時(shí)有remote 分支trunk, APP_NetEaseCloudMusic_SearchSongs , APP_NetEaseCloudMusic_UseByAnonymous,?
App_NetEaseCloudMusic_V0.1_backup 等,
通過Git Version 發(fā)現(xiàn)trunk 和 Master分支的版本是一樣的, 其他幾個(gè)分支和SVN客戶端branches 目錄下的結(jié)構(gòu)是一樣的。 說明 git svn 將svn的主干和其他分支 轉(zhuǎn)換為了git的 master 和其他branch 。
這時(shí)我們發(fā)現(xiàn)有一些remote 分支,不是本地倉庫的分支, 我們還沒有設(shè)置remote, 那就需要執(zhí)行以下的命令將remote 分支移回本地分支。
嘗試方法1
首先要移動(dòng)標(biāo)簽,把它們從奇怪的遠(yuǎn)程分支變成實(shí)際的標(biāo)簽,然后把剩下的分支移動(dòng)到本地。要把標(biāo)簽變成合適的Git標(biāo)簽,運(yùn)行
cp -Rf .git/refs/remotes/tags/* .git/refs/tags/ rm -Rf .git/refs/remotes/tags- 1
- 2
該命令將原本以tag/開頭的遠(yuǎn)程分支的索引變成真正的(輕巧的)標(biāo)簽。
接下來,把refs/remotes下面剩下的索引變成本地分支:
cp -Rf .git/refs/remotes/* .git/refs/heads/ rm -Rf .git/refs/remotes- 1
- 2
合并一起一共執(zhí)行4條命令。
cp -Rf .git/refs/remotes/tags/* .git/refs/tags/rm -Rf .git/refs/remotes/tagscp -Rf .git/refs/remotes/* .git/refs/heads/rm -Rf .git/refs/remotes- 1
- 2
- 3
- 4
- 5
- 6
- 7
嘗試方法2
在遷移 WidgetPhone 的時(shí)候,git/refs/remotes/tags/目錄不存在,而目錄.git/refs/remotes/origin/tags/存在,于是命令改為
cp -rf .git/refs/remotes/origin/tags/* .git/refs/tags/rm -rf .git/refs/remotes/origin/tagscp -rf .git/refs/remotes/origin/* .git/refs/heads/rm -rf .git/refs/remotes- 1
- 2
- 3
- 4
- 5
- 6
- 7
現(xiàn)在所有的舊分支都變成真正的分支,所有的舊標(biāo)簽也變成真正的標(biāo)簽。?
執(zhí)行后效果如下所示,可以看到其他的branch都挪到了本地。
嘗試方法3
遷移 WidgetCommon 項(xiàng)目的時(shí)候,上面兩種命令都無效,都提示 .git/refs/remotes/origin/tags/* 目錄不存在,如下圖所示:
沒辦法,去官網(wǎng)查詢了下
- https://git-scm.com/book/zh/v1/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E8%BF%81%E7%A7%BB%E5%88%B0-Git
使用如下的方法做操作。
首先要移動(dòng)標(biāo)簽,把它們從奇怪的遠(yuǎn)程分支變成實(shí)際的標(biāo)簽,然后把剩下的分支移動(dòng)到本地。要把標(biāo)簽變成合適的 Git 標(biāo)簽,運(yùn)行
$ 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- 1
該命令將原本以?tag/?開頭的遠(yuǎn)程分支的索引變成真正的(輕巧的)標(biāo)簽。
接下來,把?refs/remotes?下面剩下的索引變成本地分支:
$ 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- 1
第三步、添加遠(yuǎn)程git服務(wù)器地址
1、添加遠(yuǎn)程git remote 地址
在本地的倉庫中,增加遠(yuǎn)程git remote 地址:
git remote add origin git@172.28.10.23:AndroidWatch/NetEaseCloudMusic.git- 1
2、配置git 的 username 和 email
git config --global user.name ouyangpeng git config --global user.email ouyangpeng@oaserver.dw.gdbbk.com- 1
- 2
- 3
下面是配置好的內(nèi)容
3、執(zhí)行* git push origin –all*?命令
然后執(zhí)行* git push origin –all*?命令,推送到遠(yuǎn)程Gitlab倉庫
$ git push origin --all Counting objects: 7210, done. Delta compression using up to 8 threads. Compressing objects: 100% (5548/5548), done. Writing objects: 100% (7210/7210), 16.08 MiB | 9.68 MiB/s, done. Total 7210 (delta 3588), reused 0 (delta 0) remote: Resolving deltas: 100% (3588/3588), done. remote: GitLab: You are not allowed to push code to protected branches on this p roject. To 172.28.10.23:AndroidWatch/NetEaseCloudMusic.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@172.28.10.23:AndroidWatch/NetEaseCloudMu sic.git'- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
如上圖所示,有可能push失敗,是因?yàn)閙aster分支沒有給我授予權(quán)限push。?
因?yàn)槲沂枪芾韱T,所以我在該項(xiàng)目中,設(shè)置我為master,如下圖所示:
將我設(shè)置我為master
然后就提交成功了。
DH207891+OuyangPeng@DH207891 MINGW32 /d/git test/AndroidWatch_NetEaseCloudMusic/ NetEaseCloudeMusic (master) $ git push -u origin --all Counting objects: 7210, done. Delta compression using up to 8 threads. Compressing objects: 100% (5548/5548), done. Writing objects: 100% (7210/7210), 16.08 MiB | 9.87 MiB/s, done. Total 7210 (delta 3586), reused 0 (delta 0) remote: Resolving deltas: 100% (3586/3586), done. To 172.28.10.23:AndroidWatch/NetEaseCloudMusic.git * [new branch] master -> master Branch master set up to track remote branch master from origin.- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
4、執(zhí)行?git push -u origin –tags?命令
如果你的項(xiàng)目有Tags的話,上面最后部分git push -u origin –all,運(yùn)行之后并不能如它所說,分支和標(biāo)簽(branches and tags)都在gitlab服務(wù)器中。
實(shí)際上,只提交了branches到gitlab上面,并沒有提交tags,當(dāng)然,很簡單,你可以使用git push –h查看下幫助,就會(huì)發(fā)現(xiàn),你應(yīng)該知道怎么做了,使用git push –tags就可以了。
執(zhí)行下面命令即可,由于網(wǎng)易并沒有建立tags,所以沒有任何代碼push到gitlab.
DH207891+OuyangPeng@DH207891 MINGW32 /d/git test/AndroidWatch_NetEaseCloudMusic/ NetEaseCloudeMusic (master) $ git push -u origin --tags Everything up-to-date- 1
- 2
- 3
- 4
第四步、查看gitlab上面是否正常提交
master分支
點(diǎn)擊master下拉框,切換分支
切換到 APP_NetEaseCloudMusic_SearchSongs 分支?
查看commit 提交記錄
切換到 Branch 選項(xiàng) 可以查看所有的 Branch
第四步、定期同步SVN后續(xù)提交的代碼到Git倉庫
第一步,通過git show-ref命令查看分支情況
其中 refs/remotes/git-svn 分支就是剛才用git svn clone 之后的遠(yuǎn)程分支,可以在本地建立一個(gè)分支來同步svn后續(xù)的提交記錄
第二步,建立本地分支?local-git-svn?對(duì)應(yīng)遠(yuǎn)程分支git-svn
[root@xtgl207940 trunk]# git show-ref 9caa27cc211162aeed6e944144f4c676d2f1dfe1 refs/heads/develop 9caa27cc211162aeed6e944144f4c676d2f1dfe1 refs/heads/master 0ba94e3383d6f478844b1e674465fbc6ae0277e3 refs/remotes/git-svn 9caa27cc211162aeed6e944144f4c676d2f1dfe1 refs/remotes/origin/develop 62333dcb3beeb73e28538f815abfdfe791b88c00 refs/remotes/origin/local-git-svn 9caa27cc211162aeed6e944144f4c676d2f1dfe1 refs/remotes/origin/master [root@xtgl207940 trunk]# git checkout -b local-git-svn remotes/git-svn 切換到一個(gè)新分支 'local-git-svn' [root@xtgl207940 trunk]#- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
第三步,同步svn最新的提交記錄?
使用?git svn fetch?命令同步SVN最新的提交記錄,然后可以通過?git log命令查看git的提交記錄對(duì)應(yīng)的svn記錄相同。
- 1
- 2
- 3
第四步,切換分支到master分支,然后merge剛才的local-git-svn分支
[root@xtgl207940 trunk]# git checkout master 切換到分支 'master' 您的分支與上游分支 'origin/master' 一致。 [root@xtgl207940 trunk]# git branch develop local-git-svn * master [root@xtgl207940 trunk]# git merge local-git-svn 更新 9caa27c..0ba94e3 Fast-forward watch/src/main/java/com/xtc/watch/view/contact/activity/ContactPhoneActivity.java | 2 +- watch/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) [root@xtgl207940 trunk]#- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
第五步,提交master分支到GitLab遠(yuǎn)程倉庫
第六步,查看gitlab上的代碼
終于將之前寫好的指導(dǎo)文件遷移到了CSDN博客上,這份指導(dǎo)文件已經(jīng)完成了它的歷史使命,因?yàn)槲覀儓F(tuán)隊(duì)內(nèi)部所有代碼都已經(jīng)成功遷移到了GitLab上,SVN已經(jīng)成為過去式,但是這份文件可以分享出來給有需要的人。
轉(zhuǎn)載于:https://www.cnblogs.com/itrena/p/9062653.html
總結(jié)
以上是生活随笔為你收集整理的p1、查询端口号占用,根据端口查看进程信息/p的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac 系统安装 eclipse 方法
- 下一篇: 【XSY2469】graph 分治 并查