[Git] Unable to find remote helper for ‘https’

當使用 git 以 HTTPS 連線 clone repository 時出現 …

Unable to find remote helper for ‘https’

 

可能是在安裝 git 時因為缺少 libcurl 套件所導致

但是環境沒有 libcurl 時一樣可以安裝,只是會不能走 HTTPS 通道而已

 

若要修復這個問題,只需安裝 libcurl 後重新編譯安裝 git 就好:

# 系統為Ubuntu/Debain時,執行以下指令
apt-get install -y libcurl4-openssl-dev 

# 系統為CentOS/RedHat/Fedora時,執行以下指令
yum install -y libcurl-devel.x86_64

# 回到 git 原始碼目錄重新編譯並安裝 git
cd ~/git-2.8.16
./configure
make
make install

Reference: linux – “Unable to find remote helper for ‘https'” during git clone – Stack Overflow

[Git] 環境初始設定

 

Git 安裝完之後調整一些小設定協助日常工作

直接在shell內執行即可

# 設定user name與email,以後下commit時Author information會套用這裡的設定值
git config --global user.name "Calos"
git config --global user.email "username@email.com"
# 讓git在顯示這四種指令的output時顯示顏色
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.log auto

Reference: Git 基礎設定 (帳號的環境參數設定) – Tsung’s Blog

[Git] 設定editor

有時候單 commit 修改幅度不小,或是需要做長一點的說明時,直接在 command line 打會有點不舒服

個人會習慣叫出 editor 來編輯

git commit -e

今天在新環境時剛好需要用到 commit -e,指令下去之後噴了兩行 error

[Calos.Calos-PC] git commit -e
error: cannot run vi: No such file or directory
error: There was a problem with the editor 'vi'.

core.editor 沒設定,在使用到需要利用 editor 進行的指令時就會出現這種錯誤

core.editor 設為 vim

git config --global core.editor vim

搞定

[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