成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于使用 git 合作開發(fā)時(shí)的通用操作

wayneli / 3237人閱讀

摘要:通常我們工作時(shí)是這樣操作說一下使用做版本控制的時(shí)候的工作流程需要添加到版本庫中的文件就代表著所有文件除開了忽略掉的文件本次提交的備注將遠(yuǎn)程的庫和本地的庫版本同步一下因?yàn)檫h(yuǎn)程庫可能發(fā)生了修改多人合作開發(fā)時(shí)這樣操作的前提是本地遠(yuǎn)程都是同一

通常我們工作時(shí)是這樣操作

說一下使用 git 做版本控制的時(shí)候的工作流程

git add -A           #需要添加到版本庫中的文件 -A 就代表著所有文件(除開了 .gitignore忽略掉的文件)
git commit -m "本次提交的備注"
git pull            #將遠(yuǎn)程的庫和本地的庫版本同步一下,因?yàn)檫h(yuǎn)程庫可能發(fā)生了修改(多人合作開發(fā)時(shí))
git push          

這樣操作的前提是本地遠(yuǎn)程都是同一個(gè) master 分支上

最可能會碰到的問題

以上操作前兩步通常不會碰到問題,最容易發(fā)生問題的是 git pull 這一步
因?yàn)槎嗳碎_發(fā)時(shí)難免碰到同時(shí)修改了同一個(gè)文件,那么就會產(chǎn)生沖突
git 是根據(jù)文件每行發(fā)生的修改進(jìn)行的判定的,如果同時(shí)對同一文件的同一行發(fā)生了修改,就卡死到這一步上了

怎么解決這個(gè)問題

我常用的是命令行和 phpstrom 中的版本控制工具,最推薦的是命令行操作,別的圖形界面也是調(diào)的命令行接口
直接學(xué)會git 的命令是學(xué)習(xí)成本最低的一種方式,一次學(xué)會到處可用啊!

命令行還有個(gè)強(qiáng)大的地方就是它的提示通常就是你解決問題的方法,照著提示打就行(要善用提示啊,別看見報(bào)錯(cuò)就慌了)

我們做一個(gè)實(shí)驗(yàn),我自己的一個(gè)版本庫本地和遠(yuǎn)程同時(shí)發(fā)生了修改,而且是操作的同一個(gè)文件,
我直接進(jìn)行 git push操作


看到提示沒?提示中的 hint 中說了,向遠(yuǎn)程庫中更新被拒,因?yàn)檫h(yuǎn)程有了修改而本地沒有(說白了就是沒同步),
這通常發(fā)生在另一個(gè)版本庫向遠(yuǎn)程推送了相同的文件(就是兩個(gè)人在這個(gè)版本下同時(shí)操作了同一個(gè)文件),
提示中給出原因之后緊接著給出了解決辦法(e.g., "git pull ...")before pushing again,

我們按著它給的提示操作一下

通常如果兩個(gè)人之間的操作不發(fā)生沖突比如同時(shí)修改了同一個(gè)文件的同一行的情況下就會進(jìn)入commit
編輯界面了,但是我給他人為的造成一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤就是我們最常碰到的錯(cuò)誤,合并沖突
看到提示中的最后一行了沒有?
Automatic merge failed; fix conflicts and then commit the result.
自動合并失敗了,請修復(fù)沖突并再次提交

如果文件很多我怎么去找到它?

一種是靠界面工具主動把錯(cuò)誤推到你面前

另一種就是自己去找了

第一種方法坑爹的地方就是好多工具他給你提示就提示一次,你如果給關(guān)了就不會再提示了,但是該提交不上去的
還是提交不上去,而且如果是線上火速修復(fù)的時(shí)候你的編輯器是幫不到那么遠(yuǎn)的
我們選第二種,肯定不是挨個(gè)文件去翻啊!會死人的

有一個(gè)很有用的命令

git status


標(biāo)紅的文件都給你了,而且還給你了需要執(zhí)行的命令,你別假裝看不到啊!
當(dāng)然這個(gè)時(shí)候直接git add && git commit會出事的,你還沒解決沖突呢!
我們?nèi)ミ@個(gè)沖突文件中解決掉沖突本地能跑通了再提交,而且這個(gè)錯(cuò)誤提示會指名文件路徑的,我這個(gè)沖突文件
因?yàn)檎檬窃陧?xiàng)目的根目錄下才沒有的

打開這個(gè)文件我們看到如下的內(nèi)容:

我這是在 phpstrom 中打開的文件,如果phpstrom 能讀取到你項(xiàng)目中的 .git/ 目錄是可以進(jìn)行版本控制的
這里phpstrom 就幫你把沖突文件標(biāo)紅了,多么醒目~當(dāng)然這也是我們自己找的
如果文件內(nèi)容特別多但是就一兩處沖突時(shí)我們直接搜索關(guān)鍵詞 HEAD或者<<<<<<<就行,你懂的...
被尖角號擴(kuò)起來的就是沖突的地方,接下來就是保孩子還是保大人解決沖突的時(shí)候了,找到誰和你改的同一處代碼

什么?你說你找不到是誰?你沒看到代碼沖突塊下的 779833d952d8a6557b2e8eba3bd192ede5cb6ca0
這一段文字嗎?你先別激動,這個(gè)點(diǎn)還不適合開車,這個(gè)是提交的 commit-id,你每次提交都會產(chǎn)生的一個(gè)標(biāo)識
要查看這到底是誰和我的代碼沖突了就執(zhí)行下面的命令

git log 779833d952d8a6557b2e8eba3bd192ede5cb6ca0

第一行就是你要的結(jié)果,
如果直接git log -p 就是列出所有的提交記錄 -p 就是顯示出修改的地方

沖突塊部分 HEAD就是你寫的代碼,下面的是別人寫的,去掉其中一個(gè)把那些標(biāo)簽清理干凈,測試一下沒問題了
git add && git commit && git pull && git push 這四連技好了,世界清凈了

這合并的時(shí)候發(fā)生了什么?

這是我在 segmentfault 中給出的答案:

比如你從一個(gè)git log為1,2,3,4,5,6的遠(yuǎn)程庫拉取到了本地,
另一個(gè)同事也拉取了同樣的代碼,而且你的同事先于你提交到遠(yuǎn)程了,
此時(shí)遠(yuǎn)程的版本是1,2,3,4,5,6,7_new,8_new,
而你當(dāng)前只是本地的版本1,2,3,4,5,6,7_local,8_local,9_local
從這里你就能看出你前一部分和遠(yuǎn)程的一樣,后一部分和遠(yuǎn)程的不一樣,
這個(gè)時(shí)候你不能正常推送上去的,如果你采取git push origin master --force
那么遠(yuǎn)程的版本就變成了1,2,3,4,5,6,7_local,8_local,9_local
之前你同事推送的7_new,8_new這兩次推送被覆蓋了,這不是大家想要的情況
因此需要git pull來將本地的版本合并成樣
1,2,3,4,5,6,7_new,7_local,8_local,8_new,9_local,10_commit_merge
遠(yuǎn)程和本地的排序是按當(dāng)時(shí) commit 的時(shí)間來排的,最后一個(gè)10_commit_merge就是你本地遠(yuǎn)程合并的標(biāo)志,最后你推送到遠(yuǎn)程倉庫的應(yīng)該也是這個(gè),
因?yàn)槟銈儾僮鞯氖峭粋€(gè)庫始終要保持代碼的同步,所以一旦版本庫發(fā)生改動同一分支下的所有人都要跟著去同步他,因?yàn)楦鏖_發(fā)各的直接往上推 git 還沒智能到幫你處理沖突的地步

如果只想合并分支里的幾個(gè)文件怎么辦?

比如我有兩個(gè)分支

* alpha
  dev

我只要 dev 中的某幾個(gè)文件, 比如 README.md 和 LICENSE.md, 那么我就

git checkout dev /path/to/README.md /path/to/LICENSE.md

就會拉取 dev 分支中的這幾個(gè)文件覆蓋到 alpha 分支上, 注意拉取的文件會強(qiáng)制覆蓋, 然后你 git diff 一下這幾個(gè)文件看有沒有問題, 直接git commit && git pull && git push 一套帶走就行

答案鏈接
博客原文

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23061.html

相關(guān)文章

  • 團(tuán)隊(duì)合作必備的Git操作

    編輯器&Mac 1、編輯器的使用vs code 插件 git輔助工具,可查看代碼的書寫者:Git Blame 2、 Mac工具使用 強(qiáng)大終端 item2 3、在 macOS 中完美配置文件名大小寫敏感(解決git默認(rèn)對大小寫不敏感問題)解決git大小寫不敏感 知識篇 一、git使用 一般企業(yè)中使用代碼管理工具Git開發(fā)時(shí)都是通過拉分支進(jìn)行功能細(xì)致開發(fā),所以掌握git的分支操作時(shí)必要的 使用...

    tinyq 評論0 收藏0
  • 團(tuán)隊(duì)合作必備的Git操作

    編輯器&Mac 1、編輯器的使用vs code 插件 git輔助工具,可查看代碼的書寫者:Git Blame 2、 Mac工具使用 強(qiáng)大終端 item2 3、在 macOS 中完美配置文件名大小寫敏感(解決git默認(rèn)對大小寫不敏感問題)解決git大小寫不敏感 知識篇 一、git使用 一般企業(yè)中使用代碼管理工具Git開發(fā)時(shí)都是通過拉分支進(jìn)行功能細(xì)致開發(fā),所以掌握git的分支操作時(shí)必要的 使用...

    ymyang 評論0 收藏0
  • Python和FFmpeg強(qiáng)強(qiáng)聯(lián)合

    摘要:核心子進(jìn)程運(yùn)行控制。由應(yīng)用來看,關(guān)鍵是錄制屏幕和錄制攝像頭,以及用快捷鍵控制在這兩者之間切換。限制條件是超過三個(gè)月快捷鍵失效。實(shí)現(xiàn)分兩步安裝時(shí)在注冊表特定位置,假如是,寫入目錄相關(guān)信息。在程序運(yùn)行時(shí),檢測當(dāng)前目錄是否存在于注冊表下。 錄制項(xiàng)目終于做完,不用總是提醒自己抓緊時(shí)間這樣來想問題了。在完成之后帶著一些滿足感,回頭看看哪些地方是需要改進(jìn)的,哪些地方又是有更好的替代方案,自己又有哪...

    ThreeWords 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<