2015年12月7日 星期一

GitHub/GitLab 分散式版本控管之指令整理

PM 實驗室之 GitLab (限校內 ip):http://120.117.72.71/
教學:http://blog.gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/
---
PM GitLab 實作範例:
‧ 上傳一個已完成之專案:
  1. 登入 GitLab (http://120.117.72.71/) → 進入/建立 Group (請整齊分類)
  2. 新增 Projects:
    1. 輸入 Project path:JAVA-CustomizablePizza
    2. 輸入Description:簡單說明…
    3. 權限(設內部會員可使用):Internal Project
  3. 至本機下載剛創立的 Git 專案:
    1. 選擇「HTTP」取得網址
    2. 本機下指令: git clone git@120.117.72.71:$USER/javaProject.CustomizablePizza.git
  4. 上傳做好的程式及檔案至 GitLab 的 javaProject.CustomizablePizza 專案:
    1. cd javaProject.CustomizablePizza.git
    2. cp ../CustomizablePizza .
    3. cp ../CustomizablePizza_v5.jar .
    4. cp ../README.md .
    5. git add .
    6. git commit -m "Java Project Customizable Pizza - OK"
    7. git push -u origin master
  5. master 下的後續更新:
    1. touch file1
    2. git add 
    3. git commit -m "add file1"
    4. git push -u origin master
  6. 建立新分支(版本)來加入新功能或 Debug
    1. git branch → 查看目前所在分支
    2. git branch TEST → 建立一個新分支名稱為 TEST
    3. git checkout TEST → 切換至分支 TEST
    4. git branch → 檢查所在分支
    5. edit file → 變動、更新檔案(原 master 下檔案不會被變動)
    6. git add <file>
    7. git commit -m "new message"
    8. git push -u origin TEST → 至 GitLab 會發現有新版本 TEST
  7. 合併分支至主版本 master (確定所增功能或 Debug 版本完成再做)
    1. git checkout master → 會發現剛剛所編的 file 不見為正常,因為是不同 branch
    2. git merge TEST → 可以 ls 又發現剛剛所編檔案合併過來了,接著只要上傳至 GitLab
    3. git add .
    4. git commit -m "Combine TEST and master"
    5. git push -u origin master → 此時可能會提示訊息要使用 git pull
    6. git pull
    7. 登入 GitLab 查看完成
---

  • 將私人專案共享至 Group 的方法


  1. 換入 GitLab
  2. Projects → 選則要共享的專案
  3. Settings → Project Settings → 「Transfer project」→ 選擇所要加到的 Group
  4. 輸入提示字串(粉底紅字) → 按 CONFIRM → 完成。

---
零、安裝 Git:
‧ Mac : 安裝 Homebrew
‧ Linux(APT):apt-get install git-core
‧ Linux(YUM):yum install git-core
‧ Windows:安裝 msysGit
---
壹、設定 Git UI
‧查看設定:
 git config --list

‧可以記錄 git commit 提交的作者資訊:
 git config --global user.name "廖凱霖"
 git config --global user.email "ma330101@stust.edu.tw"

‧自訂指令 alias 功能(git status → git st):
git config --global alias.st status

‧設定 git 自動忽略’空白’的變化(適需求而定):
git config --global apply.whitespace nowarn

‧設定 git 輸出加入顏色變化:
 git config --global color.ui true
---
貳、常用上傳基本指令:

‧ 查看 Git 狀態: 
git status

‧ git add 加入 stage 狀態(-i 互動模式): 
git add <File>
git add -i <File>

‧ git commit 提交 (-m 加入訊息)(-v 列出更動記錄): 
git commit
git commit -m <Message>
git commit -v

‧ 查過去記錄(更詳細過去 --stat)(-p 檔案詳細記錄)
git log
git log --stat
git log -p

‧ push 上傳流程:
1. mkdir workDirectory
2. git init
3. git remote add origin http://120.117.72.71/fate615030/gitProject.git
4. git add <File>
5. git commit -m “<Message>"
6. git push -u <remote> <branch> → 例如: git push -u origin master

‧ 讓 Git 忽略版本控制的追蹤(編輯檔案加入要忽略的檔名):
vim .gitignore 
---
參、第一次使用 Git
‧自建一個新的資料庫( Repository)

1. 建立一個目錄: mkdir gitProject
2. 進入目錄:  cd gitProject
3. git init
4. 輸出告訴我們建立好了一個新的 Git Repository 。
→ Initialized empty Git repository in /UsersPath/gitProject/.git/

‧複製別人的 Git Repository
git clone http://120.117.72.71/fate615030/gitProject.git
---
肆、管理分支(Branch):
‧ 安裝圖形化介面 GitGUI: 
sudo apt-get install gitk
gitk --all

‧ 查看分支(本機、-r 遠端、-a 全部): 
git branch
git branch -r
git branch -a

‧ 加入一個新分支名為 cat: 
git brach cat

‧ 切換至 cat 分支:
git checkout cat

‧ 建立新分支並切換過去: 
git checkout -b "branch名稱"

‧ 刪除分支:
 git branch -d "branch 名稱"

‧ 分支整理(cat 會保留並加到master):
git rebase master

‧ 分支完全合併:  
git merge cat

‧ 查看不同分支差異:  
git diff cat master

‧ 取消上一次合併 merge: 
git reset --hard ORIG_HEAD
---
伍、當合併 branch 發生衝突(conflict):
1. 將發生 conflict 的檔案打開,處理內容( 別忘了刪除<<<、===、>>> )。
2. 使用 git add 將處理好的檔案加入 stage(git add)。
3. 反覆步驟 1~2 直到所有 confict 處理完畢。
4. git commit 提交合併訊息。
5. 完成
---
陸、反回功能:
‧ 取消上一次 merge:  
git reset --hard ORIG_HEAD

‧ 取消暫存檔案(add):  
git reset HEAD <file>

‧ 放棄檔案修改(回到上次 commit): 
git checkout -- <file>

‧ 修改 commit 訊息:  
git commit --amend

‧將檔案1、檔案2加入上次 commit: 
git commit --amend 檔案1 檔案2 …

‧ 回複上一個 commit 版本:  
git reset --hard HEAD^

‧ 回複上兩個 commit 版本:  
git reset --hard HEAD~2

‧取消 commit,但保留修改過檔案: 
git reset HEAD^ --soft
---
柒、遠端 Git
‧建立一個 tracking 遠端
branch git branch --track <branch名稱> <遠端branch>

‧將已存在的 branch 設定成遠端 
git branch --set-upstream <branch> <遠端branch>

‧刪除一個 tracking 的遠端
branch git -r -d <遠端branch>

‧刪除一個 repository 的 branch 
git push <repository名稱> :<遠端branch>

‧加入一個 remote repository  
git remote add <remote名稱> <remote網址>

‧下載遠端的 branch 並合併至本機 
git pull <remote名稱> <branch名稱>

‧本機上傳至遠端的 branch  
git push <remote名稱> <branch名稱>
---
捌、Git 整體工作規程:
1. 在專案中會有一條主 branch 是大家將開發好或是修好的東西合併回去的對象,所有要開發的新功能或是修 bug 都是從主 branch 拉出一條新的 branch 去工作。

2. 當你完成一個階段性的任務時,將你剛剛 所新增的內容使用 git add 加入到 stage 的狀態,並且使用 git commit 加上 commit 的訊息來提交一次的 commit。

3. 反覆動作 2 直到你完成這支 branch 的主要目的(新功能/修 bug ),若這時你離主 branch 已經有一段時間,或是確定主 branch 上已經有新的 commit ,使用 git rebase 將自己的分支整理然後使用 git merge 合併回主 branch,反之則是直接使用 git merge 將自己 branch 的內容合併回去。