背景:公司由于一些問題,需要將外網(wǎng)GitLab上的代碼遷移至內(nèi)網(wǎng)GitLab,中間遇到一些坑在此記錄一下。
1.Git兩種協(xié)議及適應(yīng)場(chǎng)景
一個(gè)Git項(xiàng)目最重要的文件是.git文件,對(duì)代碼的操作其實(shí)是對(duì).git文件的操作(如拉取代碼,推送代碼等)。Git常用的兩種協(xié)議:SSH或HTTPS,我將根據(jù)自己的理解,說說這兩種協(xié)議各自應(yīng)用場(chǎng)景;
HTTPS:每次訪問都要求輸入用戶名和密碼,可在文件中保存密碼防止重復(fù)輸入
設(shè)置git config --global credential.helper store,默認(rèn)會(huì)在用戶目錄下創(chuàng)建.git-credentials文件,里面保存賬戶名和密碼;取消保存:git config --global credential.helper "",也可以直接修改.gitconfig文件中對(duì)應(yīng)屬性值;
訪問鏈接:https://gitlab.com/dlstone/test.git
或者 https://username:password@gitlab.com/dlstone/test.git(URL中攜帶用戶名和密碼)
適合場(chǎng)景:不同項(xiàng)目在同一repository中有相同賬號(hào)名和密碼;
SSH:使用公私鑰來訪問,使用ssh-keygen生成
設(shè)置ssh-keygen參考鏈接:
創(chuàng)建密鑰:https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/
配置密鑰:https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
訪問格式:git@gitlab.com:dlstone/test.git
適合場(chǎng)景:不同項(xiàng)目在不同repository中有不同賬號(hào)名和密碼;
2.GitLab項(xiàng)目導(dǎo)入
新建項(xiàng)目,選擇Import project from?Git repository URL,按照給出的樣例拼接URL即可;
遇到問題:新建項(xiàng)目每個(gè)導(dǎo)入選項(xiàng)都有詳細(xì)說明,在不熟悉的情況下,沒有研究每個(gè)選項(xiàng)的具體作用就直接動(dòng)手實(shí)踐,導(dǎo)致浪費(fèi)了不少時(shí)間。以后在類似的場(chǎng)景,首先應(yīng)該研究每個(gè)導(dǎo)入功能的適用場(chǎng)景,從中選擇最佳實(shí)踐。
3.wiki遷移
1.將需要遷移的wiki內(nèi)容clone到本地;
2.將新項(xiàng)目的wiki內(nèi)容clone到本地;
3.拷貝wiki內(nèi)容至新項(xiàng)目并提交;
wiki拷貝遷移有個(gè)問題,以往的提交日志丟失;wiki與工程倉(cāng)庫(kù)是兩個(gè)獨(dú)立的.git文件,需要區(qū)分兩者的差別;
4.應(yīng)用部署腳本中倉(cāng)庫(kù)地址替換
遇到的問題:遷移的項(xiàng)目工程多,每個(gè)工程的部署腳本都需要修改,可使用sed,grep命令來批量替換字符串(MAC適用);?
替換單個(gè)文本中字符串:sed -i "" "s/{regular_expression}/{replacement}/g" test.txt
替換當(dāng)前目錄下匹配的字符串:sed -i "" "s/{regular_expression}/{replacement}/g" `grep "{regular_expression}" -rl ./`
5.Git Submodule處理
添加:對(duì)于主工程來說添加submodule就像添加一個(gè)文件,所以需要 add 并 commit
添加submodule:git submodule add https://gitlab.com/dlstone/child.git
添加當(dāng)前目錄下所有文件:git add .?
提交本地:git commit -m "add submodule"? ?
push到服務(wù)器:git push origin maser?
clone:與普通文本不一樣,對(duì)于含有submodule的工程需要做特殊處理
?clone代碼:git clone https://gitlab.com/dlstone/test.git
子工程初始化:git submodule init? ?
查看狀態(tài):git submodule?
更新:git submodule update --remote
更新:submodule有更新,首先將submodule工程的修改提交,然后根據(jù)以下步驟更新主工程
更新:git submodule update --remote? ?
添加當(dāng)前目錄下所有文件:git add .?
提交本地:git commit -m "add submodule"? ?
push到服務(wù)器:git push origin maser?
5.Jenkins配置修改
修改Repositories地址和認(rèn)證
修改submodule配置
刪除部署腳本中的submodule命令,不刪除會(huì)報(bào)錯(cuò)(第2步已配置,可刪除)