「最佳」始終是棘手的,但因爲使用的是GitHub上,有一個非常方便的自由永遠密碼替代,至少如果存儲庫是公共的。
爲了您的Git調用了另一個(國外)Git的互聯網電話,你可以,因爲你已經知道,使用ssh://url
或http://url
或https://url
。這些都使用不同的端口和協議; ssh
使用帶公鑰和私鑰的secure-shell; http
使用不安全(無SSL/TLS)Web瀏覽器式訪問;和https
使用安全(SSL/TLS)Web瀏覽器式訪問。最後一個需要密碼,第一個需要密鑰;但中間的一個根本不需要任何東西。
所以這是一個方法。但Git也有更高效的git
方案:git://url
的含義與http://url
相同,但使用Git端口和協議。這也是未經過驗證的,所以它不需要密碼。它只需要公共訪問,就像http://url
一樣。 GitHub也支持這一點。
如果存儲庫不公開,存儲SSH密鑰會工作。但是,如果有一個授予訪問權限的ssh密鑰,那可能也足以推送,所以我不知道爲什麼這首先是一個問題。
鍵入此問題我意識到我可以更改提取URL以使用ssh並推送使用https。
是,或者與http
或git
一樣作爲協議(URL的「scheme」部分)。事實上,Git的支持用於遠程兩個獨立的網址,所以你可以設置遠程的獲取URL(remote.origin.url
),以免密碼版,和遠程的推動URL(remote.origin.pushurl
)的基於密碼的版本。
這就是說,有一個在這個腳本一個小小的瑕疵或兩個:
git fetch --prune
branchname=$(git rev-parse --abbrev-ref HEAD);
如果HEAD
是「分離」,這將只是打印HEAD
,所以你會得到branchname=HEAD
。這可能是更好的事情可做:
branchname=$(git symbolic-ref -q --short HEAD) || die "not on a branch"
(其中die
打印消息並退出)
changes=$(git log origin/$branchname ^HEAD);
這假定當前分支上游被命名爲相同當前分支。情況可能並非如此,實際上可能根本就沒有上游。究竟是什麼爲最後一種情況下(沒有上游集)做的是你的,但你可以測試:
(這讓Git的本身打印fatal: no upstream configured for branch 'master'
或任何分支電流)。
if [[ ! -z "$changes" ]]; then
echo "You may not have the latest ..."
echo ""
fi
既然你只是要測試是否有任何修改「超前」它現在牽強上游當前分支,你並不需要一個完整的git log
。你可以只算這些修訂:
n=$(git rev-list --count [email protected]{upstream}) || exit
if [ $n -gt 0 ]; then ...; fi
,現在你甚至都不需要找到分支名稱或其上游,如git rev-list --count
將自動失效:
$ git checkout --detach HEAD
HEAD is now at cf11a6797... Eleventh batch for 2.13
$ git rev-list --count [email protected]{u}
fatal: HEAD does not point to a branch
$ git checkout diff-merge-base
Switched to branch 'diff-merge-base'
$ git rev-list --count [email protected]{u}
fatal: no upstream configured for branch 'diff-merge-base'
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 137 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
$ git rev-list --count [email protected]{u}
137
因此,我們可以減少整個腳本到:
n=$(git rev-list --count [email protected]{u}) || exit
if [ $n -gt 0 ]; then
echo ...
fi
雖然我會盡量避免推薦git pull
。現在git fetch
已取回,只需運行git merge
即可獲取最新信息。
哇,這是非常徹底和有益的。我意識到它實際上並不重要什麼帳戶拉和推,所以我要去使用SSH密鑰,因爲重要的是誰承諾。 我一定會實施你的建議,謝謝! –