3. 其中TortoiseGit只是輔助工具,在本次博客中描述的全部利用TortoiseGit進行的操做均可以使用git進行相應的操做,其中的對應關係,在熟練掌握git命令行之後就會明白,這裏就不一一介紹了,由於TortoiseGit是圖形化界面,因此放在這裏易於理解。git
2.2.1 先複製倉庫地址程序員
2.2.2 在test1文件內右擊空白處,能夠看到「Git Bash here」,點擊之後進入git的命令行界面。github
2.2.3 接下來按照圖片中的介紹克隆遠程倉庫到本地工具
文件test2也作相同的操做開發工具
這樣字體
2.3.1 首先咱們先建立一個dev分支,並同步到遠程,這個分支是兩我的的共同的主開發分支命令行
2.3.2 接下來在兩個倉庫內爲每一個倉庫都建立一個我的的開發分支,並同步到遠程,這裏我爲test1文件夾裏的倉庫建立了分支dev-01,爲test2文件夾裏的倉庫建立了分支dev-02,具體操做跟上面建立主開發分支同樣3d
2.3.3 接下來在每一個文件夾內都切換至對應的我的分支,在我的分支裏進行開發,隨後的推送也應該推送到我的的分支,也就是dev-01和dev-02,而不要直接推送至dev分支。orm
2.4.1 先 test1 內添加一個新項目。項目的初始結構如圖所示。xml
2.4.2 接下來就是用git的一系列操做,add-> commit-> push ,這裏我用TortoiseGit,
先是添加。
而後會出現一個文件的列表,直接點肯定就能夠了。而後會出現以下界面
能夠直接點肯定旁邊的提交,也能夠點擊肯定退出這個界面,從右鍵的菜單中進入提交界面
出現下面的界面,即表示提交成功
接下來,由於咱們遠端還有一個github替咱們管理着倉庫,因此咱們還要同步到遠端的我的分支上
右鍵菜單中選擇「同步」
接下來點擊推送便可,這裏要注意遠端分支是否爲我的的開發分支,而後origin的值是不是遠端的倉庫地址,通常按照前面的操做來,這裏的數據就是正確的,若是有錯誤,能夠檢查一下這兩個值
推送成功後,就會出現以下畫面
2.5.1 如圖所示,點擊 「New pull request」
2.5.2 即便前面沒有切換到我的的開發分支,也能夠在任意一個分支內點擊「New pull request」,按照圖片所示,仍是能夠在下圖的界面中切換分支的。點擊「create pull request」
2.5.3 接下來點擊「Merge pull request」,而後會讓你確認一下,繼續點擊「confirm merge」就能夠了
2.5.4 出現以下界面即表示merge成功了
2.6.1 由於test2的倉庫內尚未任何文件,因此先將遠程中dev分支內的最新內容拉取下來
2.6.2 以下圖所示,選擇正確的遠端分支,並勾選上「合併」選項,點擊肯定後,便可進行拉取操做
2.6.3 原本test2 的倉庫內是沒有任何內容的,成功進行拉取後就會出現相應的文件
2.6.4 打開項目後,並添加一個新的窗體form2
2.6.5 接下來就按照 2.4.2 的步驟操做便可,這裏就直接跳到以下圖所示的界面,這裏咱們能夠很清楚的看到幾個紅字,也就是github不能自動合併了,這是爲何了呢?這裏咱們先來回顧一下咱們以前作了什麼
首先,咱們讓test1和test2都處於倉庫的最新版本,也就是啥也沒有
而後咱們在test1和test2的開發過程當中切換至各自的開發分支,同步到遠端倉庫(github)時也是推送到各自的我的分支
而後咱們將dev-01的內容成功merge到了dev中,這樣應該發現問題所在了把,也就是,test2開發的時候基於的遠程倉庫版本是什麼都沒有的,跟test1是同樣的,可是test1先於test2 merge到了dev分支中,因此如今的dev已經不是當初的dev了,這個時候若是test2還想要合併的話,在沒有衝突的狀況下仍是能夠合併的,可是由於存在了衝突,因此咱們接下來進入重頭戲,也就是解決衝突。
2.7.1 首先仍是先拉取最新的dev分支的內容到本地test2文件內的dev-02分支上。
按照前面講述的操做後,會發現出現了以下的界面,提示git 未能順利結束,並彈出一個提示框,這個的出現很正常,由於你在遠端想要合併的時候就已經知道有衝突了,因此在這裏天然是不能正常合併成功了。咱們須要解決掉衝突文件。這裏題外話一句,咱們如今拉取的是最新的dev,因此解決了衝突之後,通常來講是能夠成功在遠端進行merge操做的,至於不通常的狀況,暫時本人還沒遇到,之後若是有遇到的話再繼續補充。
這裏直接點擊肯定就能夠啦!
2.7.2 點擊肯定之後,會繼續彈出一個框,點擊是能夠查看一下變動狀況,這裏咱們點擊「是」來展現一下
2.7.3 點擊之後出現以下界面,咱們能夠看到存在一個衝突,這就是咱們須要解決的。
2.7.4 首先咱們用記事本打開一下這個文件,咱們會發現一個神奇的東西,首先要說明一下,這個衝突文件內的格式是xml格式。針對vs 的C#窗體項目來講,這個文件內容出錯,是沒法正確打開項目的。
紅色圈起來的部分就是衝突的部分,
2.7.5 咱們在未修改任何東西的狀況下嘗試打開該項目,會出現這個報錯的狀況,在個人嘗試下,這個的報錯,就是上面那個文件內容出錯了。
2.7.6 接下來爲你們介紹兩種解決該衝突的辦法
第一種:
第一步:直接刪除掉紅框內這部分看起來奇奇怪怪的東西,這樣刪除之後,能夠保證項目能夠打開,可是聰明的你們確定會發現,刪除掉的是form2的一些內容,因此對form2確定會產生影響
第二步:咱們打開項目發現的確沒有看到form2在項目資源裏,解決辦法很簡單,再把form2手動添加一下就能夠啦,由於form2的文件是存在的,只是未加載到項目中
第二種:
這一種方法很簡單,只有一步,刪除掉紅線劃掉的三行內容便可,這三行是git在合併時自動加上的,用來標註改動的內容,咱們須要手動解決這個衝突的緣由就在於這,由於自動加了一些內容,因此刪除就行了,至於這三行標註中間的內容,就是咱們和最新版本不同的地方,咱們須要人爲決定是否保留。
刪掉三行內容後,項目就能夠正常打開了,還能夠看見form1和form2。
2.7.7 至此咱們就解決了該次衝突,由於本次只是演示,衝突文件只有這一個,其餘的衝突大體上解決方法都差很少,代碼文件基本上都是能夠用記事本打開的,或者有其餘的打開軟件也能夠,若是衝突文件打開之後是亂碼,那頗有可能這個文件是不該該出如今倉庫裏的,由於倉庫更多地是用來管理代碼和一些必要的啓動的文件,若是是本地開發工具的自動生成文件,是要忽略掉的,否則很是容易產生解決不了的衝突,這也就是咱們爲何在github上建立倉庫的時候添加了對應的忽略文件,其餘開發過程大多也能夠找到相應的忽略文件。
2.7.8 而後咱們就繼續2.4.2的步驟,依舊是跳過,固然在過程當中可能會出現與2.4.2 中不徹底同樣的內容,隨機應變便可,基本上閉着眼睛繼續下一步操做就能夠了,不須要修改太多的內容,而後通常就能夠成功合併了,代碼中若是出現這樣的狀況也同樣操做就能夠了。
下面展現會出現的一些新界面
而後再推送到遠端便可。
2.7.9 接下來就要說一下另外一個問題,雖然本地的衝突解決了,可是遠程一樣也須要推送最新的內容上去,這裏可能會出現一個問題就是明明將最新的版本同步到github了,可是實際上github上並無顯示最新的提交,至於爲何會這樣,我也不知道了。因此這裏再補充一個解決merge衝突的辦法;在gituhub端修改衝突文件。具體操做步驟爲雖然產生衝突但依舊create pull request -> resolve conflict (這是一行小灰色字體,在以前confirm merge 的那個地方能夠找到)
而後就會進入衝突文件的界面,同樣進行手動修改就能夠了,最後再點擊merge,confirm merge便可進行合併操做了。
至此基本上就能解決衝突而且成功合併了。