[Git] tag 操作

一個專案如果 commit 了 N 次,就算 commit message 寫得很完整,如果要很快的找到特定版本也是有點困難。

利用 git tag 幫 commit 加入標籤,操作上就更方便迅速。

# 列出所有標籤
git tag

# 新增一個標籤,名稱為 my-tag
git tag my-tag

# 如果要自訂註解,可以利用參數 -m,沒有加 -m 的話預設會以 HEAD (當前版本) commit message 為標籤的 message
git tag my-tag -m "My tag message."

# 如果要寫多行註解,可以利用參數 -a 開啟編輯器編寫
git tag -a my-tag

# 從指定標籤開一個新 branch
git branch new-branch my-tag

# 查看標籤詳細資料
git show my-tag

# 針對指定 commit 做標籤
git tag my-tag d3a0dcb

# push 指定標籤 (多個標籤以空白隔開)
git push origin my-tag

# push 所有 tag
git push --tags

# 刪除本機端指定標籤 (多個標籤以空白隔開)
git tag -d my-tag

# 刪除本機端所有標籤
git tag | xargs git tag -d

# 刪除遠端指定標籤 (多個標籤以空白隔開,但是每個標籤前面都要加上 :refs/tags/)
git push origin :refs/tags/my-tag

 

有關 Tag update:

在更新本機標籤時需要使用 git fetch,而不是 git pull

git remote update 雖然會把新的標籤拉下來

但是若兩端皆存在相同名稱的標籤,且遠端版本較新時

git remote update 並不會更新本機標籤

由於標籤和 branch 性質不相同,如果要更新標籤,需要在強制模式 (參數 --force) 下執行 (除了 fetch)

以下為更新標籤的操作方式

# 覆寫標籤 (以當前 branch 最後一次的 commit 寫入)
git tag -f my-tag

# 覆寫遠端指定標籤 (多個標籤以空白隔開)
git push -f --follow-tags origin my-tag

# 覆寫遠端所有標籤 (本機端不存在的標籤不會覆寫上去)
git push -f --tags

# 從遠端覆寫本機端所有標籤 (遠端不存在的標籤不會被覆寫)
git fetch --tags

 

為標籤重新命名:

Git 本身並沒有辦法讓標籤直接重新命名

因此需要用建立新標籤 + 移除舊標籤的方式達成

# 使用 old-tag 的 commit 建立新標籤 new-tag
git tag new-tag old-tag

# 刪除本機端舊標籤
git tag -d old-tag

# 刪除遠端舊標籤
git push origin :refs/tags/old-tag

# 上傳新標籤
git push origin new-tag

 

如果專案有多人協作

請通知你的夥伴們執行 git pull --prune --tags

否則舊標籤仍然會存在於他們的電腦上

且他們在 push 時就很有可能又把舊標籤 push 上去


Reference: git tag – How do you rename a Git tag? – Stack Overflow

發表留言

[Git] Gitolite install

利用apt-get安裝(已安裝git-core時可不用鍵入git-core):

>sudo apt-get install git-core gitolite

 

建立gitolite的系統使用者帳號:

>sudo adduser --system --group --shell /bin//bash --disabled-password git

 

如果沒有ssh-key,需產生一組來使用,並且複製一份到git的家目錄,供稍後安裝使用(為了區分各種key,將id_rsa.pub更名)

ssh-keygen -t rsa -C "[email protected]"
sudo cp .ssh/id_rsa.pub /home/git
sudo mv /home/git/id_rsa.pub /home/git/calos.pub
sudo chmod 777 /home/git/calos.pub

 

切換帳號到git

>sudo su - git

 

使用gl-setup進行安裝,此動作需要匯入管理者的ssh-key

>gl-setup ./calos.pub

 

gitolite是利用git repository的模式下去管理專案與使用者,第一次設定專案或使用者時需clone gitolite-admin這個repository

>git clone [email protected]:gitolite-admin.git

 

切換到gitolite-admin這個目錄時,可以看到底下有conf與keydir這兩個目錄

若要將他人加入到git的使用者,只需將他人的ssh-key複製一份到keydir這個目錄下,並git add

>cp /path/to/chuchu/id_rsa.pub ~/gitolite-admin/keydir/chuchu.pub
git add ~/gitolite-admin//keydir/chuchu.pub

 

建立專案與設定權限在conf/gitolite.conf這個檔案裡

>vim ~/gitolite-admin/conf/gitolite.conf
repo gitolite-admin
RW+ = calos
repo testing
RW+ @all

 

權限劃分如下:

R:只能讀取

RW:可覆寫或新增參照點

RW+:可強制覆寫(push -f)或刪除參照點

-:據絕存取
群組設定,在設定名稱前面加上「@」,後面可設定隸屬於該群組的User或Repository,下列為範例

># Users group
@group_1 Calos Chuchu
@group_2 KYKY Johnson
#Repositories group
@group_3 project_2 project_3
repo gitolite-admin
RW+  Calos
# 在project_1,Calos可強制覆寫參照,Chuchu可建立或刪除參照,Johnson與KYKY只可讀取
repo project_1
RW+  Calos
RW    @group_1
R       @group_2
# 在project_2與project_3,Johnson與KYKY可以強制覆寫參照,Calos與Chuchu只可讀取
repo @group_3
RW+ @group_2
R      @group_1

 

做任何更動後需push,才會生效

>git add ~/gitolite-admin/conf/gitolite.conf
git commit -m "Change gitolite config"
發表留言

[Git] Basic Command

# 設定個人資訊 (這些資訊會顯示在commit log上)
git config --global username "your name"
git config --global email "your E-mail"

#------------------------------[init]-----------------------------------
# 切換到自己的專案目錄
cd my_project

# 管理初始化
git init


#------------------------------[add]----------------------------------
# 新增檔案
git add (file name)

# 將當前目錄下的所有檔案及目錄加入管理
git add .

# 將指定子目錄下的指定檔案加入管理
git add dir_name/file_name

# 將指定子目錄下的所有檔案加入管理
git add dir_name/.

# 新增修改過的檔案 (兩者皆可)
git add -u
git add modifyfile


#-------------------------------[commit]----------------------------------
# commit並添加註解
git commit -m "commit message"

# 自動add修改過的檔案(不包含未納管的檔案)並commit (會開啟editor,需要寫commit massage)
git commit -a

# 同上,差異在於commit massage直接寫在-m後面,並不會開啟editor
git commit -a -m "commit message"

# -v 可以看到檔案哪些內容有被更改
git commit -a -v


#-------------------------------[branch]----------------------------------
# 列出現有branch
git branch

# 列出所有branch
git branch -a

# 新增branch
git branch (branch name)

# 從master新增branch
git branch test-branch master

# 刪除branch
git branch -d (branch name)

# 強制刪除branch
git branch -D (branch name)

# 重新命名branch (當前branch為old branch時可忽略參數old branch name)
git branch -m (old branch name) (new branch name)

# 切換至指定branch
git checkout (branch name)

# 將指定的branch與當前branch合併
git merge (branch name)

#-------------[push、pull、clone、remote(以girhub為例)]-------------
# 提交變更至git server
git push [email protected]:(user name)/(project name).git

# 提交指定branch的變更
git push [email protected]:(user name)/(project name).git (branch name)

# 刪除git server上的branch(下列兩種方式皆可)
git push [email protected]:(user name)/(project name) .git :(branch name)
git push origin --delete (branch name)

# 檢查git server有無較新的變更,並拉下來更新本機的檔案(未指定remote+branch name則對目前branch進行作業)
git pull (remote) (branch name)

# 將該專案資料夾從git server拉下來
git clone [email protected]:(user name)/(project name).git

# 新增遠端名稱
git remote (remote name) [email protected]:(user name)/(project name).git

# 顯示現有remote清單
git remote -v

# 將project上傳到指定的remote
git push (remote name)

# 將project裡指定branch的上傳到指定的remote
git push (remote name) (branch name)
example:
git remote origin [email protected]:athlon20147/myproject.git //remote name : origin
新增好remote後,以下兩行功能相等
git push [email protected]:athlon20147/myproject.git
git push origin

-------------------------------[other]----------------------------------
# 檢視變更紀錄
git log

# 還原已經commit刪除的檔案
git checkout <deleteing_commit>^ -- <file_path>
ex: git checkout b05128e3ebd4f38c317f066d679aee21c7d3af65^ -- config/ldap-sample.php
發表留言

[Git] Github、Bitbucket綁定ssh-key

若環境是Windows,請先安裝Git 


產生一組新的SSH Key(如果已經有現成的,可跳過這步驟)

# 切換到使用者家目錄
cd ~

# 產生ssh key
ssh-keygen -t rsa -C "你的E-mail"

# 這裡是指定key的擺放位置,直接Enter下去使用預設值就好
Generating public/private rsa key pair.
Enter file in  which to have the key
(/Users/your_user_directory/.ssh/id_rsa):

# key的驗證密碼,在進行驗證時使用者端需要額外輸入密碼做驗證,也可以留空 (建議不要在公用電腦使用空密碼)
Enter passphrase (Empty for nopassphrase):

# 再次輸入
Enter same passphrase again:

# 完成後會看到家目錄多了一個.ssh的目錄,裡面有 id_rsa (Private-Key) 與 id_rsa.pub (Public-Key) 兩個檔案
# 使用 cat 指令顯示自己的public-key (要加入到git server用)
cat ~/.ssh/id_rsa.pub

 

 


將Key加入至 Github 帳號

git-hub-add-public-key


將Key加入至 Bitbucket 帳號

bitbucket-add-public-key
發表留言