YD's blog

Posted 二 02 8月 2016

Git Tutorial (Demo on Bitbucket)

Create repository

創建bitbucket 帳號:https://bitbucket.org

Name: 知識庫名稱,也是default local file folder name Access Level: 比免費github多的功能,私密桶。
Forking: 最好設定no forking,這樣就不會被複製知識庫。
Repository type: 預設git。(Windows 需要下載 git command line)
Project management
Language: 程式碼的知識庫為何
Repository integrations


基本git指令與實作程序

為何要用git? 以空間錯位換取時間錯位

將知識庫拉至本地端:開啟預定存放的資料夾位置 cd C://

git clone https://<account>@bitbucket.org/<account>/<bucketname>.git

情境一:自己管理自己的知識庫

創建好知識庫並拉到本地端 基礎的add, commit, push

vim doc.txt //新增一個文件
git add doc.txt //加入文件,若之後是要整個資料夾push,可用 git add --all 或 git add .
git commit -m "first commit"
git push origin master //第一次push要寫 origin master ,因為遠端並沒有這條branch

但是只有自己管理不行,要和別人協作,先學會branch操作


基礎的branch操作 根據原本的doc.txt 進行修改,並另闢一分支 (branch) ,將編輯過的檔案放入。

git checkout -b b1 //創建新的分支名為 "b1"
(修改master分支的 doc.txt 內容)
git add .
git commit -m "b1 first commit"
git push --set-upstream origin b1 //因為遠端尚未有 b1 分支,因此要先用 origin

我們可以看看所處現在的位置

git branch //應為 b1

我們進一步看看 b1與 master 內容物的差異

git diff master

再來我們開第二個分支,同樣的做法,只是再換一個檔案內容(為了讓你們體驗合併衝突的前置作業)

git checkout master
(修改master分支的 doc.txt 內容)
git checkout -b b2
git add .
git commit -m "b2 first commit"
git push --set-upstream origin b2

進行合併前,先來做觀點取替的練習

git branch //應為 b2
git diff master //以b2視角看master的差異
git checkout master //切換視角至master
git diff b2 //以master視角看b2的差異

因為master的 doc.txt 和 b1 doc.txt 只差一個版本,我們就可以直接做合併 (merge)的動作,此稱為「快轉」(fast-forward)。

git checkout master //先換到master分支
git merge b1 //fast-forward 會直接成功

接下來我們再來用 master 合併 b2 不過等等!現在的 master 內的 doc.txt 已經是 b1 doc.txt 的內容物了,所以有沒有發現哪裡怪怪的?

git merge b2 //會出現 Automatic merge failed; fix conflicts and then commit the result.

這時我們得人工去修改這個衝突,這種合併的做法稱為「non fast-forward」。改完以後,就可以合併了

git add .
git commit -m "merge b1 b2"
git push //這時不需要 git commit -m "" , bitbucket會幫你建一個 message:"merge" 的 commit

情境二:使用過去的提交,並重新推上去

git checkout <commit> //輸入commit
(進行內容修改)
git checkout -b tempbranch
git add .
git commit -m "temp"
git push --set-upstream origin temp
git checkout master
git merge temp
git branch -d temp //刪掉該分支,但分枝舊的歷史紀錄還是保存

練習:多人協作知識庫

master內有個公檔,每個人要開自己的分支,然後修改公檔內的資料,並且提交自己的分支到遠端。 並請大家在issue發佈自己已經成功更新檔案更新到分支 假設我 為master 管理者,找一個 user 當作是可以merge的版本,並針對各個issue做回應。

查看遠端知識庫的分支

git branch -a

將本地端重新同步

git pull origin <branch name>
git add
git commit
git push --set-upstream origin <branch name>
Category: WorkNote
Tags: Git