我希望git push origin
在我第一次推送本地創建的分支時自動設置上游引用。如何配置git推動自動設置上游沒有-u?
我知道git push -u
,但我不想考慮我以前是否使用過-u
或者設置了上游參考。換句話說,我希望git push
在尚未有上游的分支的任何推動上自動產生git push -u
的效果。
這可能嗎?如果它需要別名或實用程序腳本,那很好。
我希望git push origin
在我第一次推送本地創建的分支時自動設置上游引用。如何配置git推動自動設置上游沒有-u?
我知道git push -u
,但我不想考慮我以前是否使用過-u
或者設置了上游參考。換句話說,我希望git push
在尚未有上游的分支的任何推動上自動產生git push -u
的效果。
這可能嗎?如果它需要別名或實用程序腳本,那很好。
因爲我不認爲這是可能的使用混帳配置,這裏是你可以在bash做什麼:
[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push
如果當前分支具有遠程跟蹤分支,它調用git push
否則調用git push -u
您現在可以執行'git config --global push.default current'。 –
注:以下事實new default push policy "simple
"依賴於具有上游一個分支意味着:
設置的上游分支被看作是自願步驟,而不是隱藏的自動化一個
當「
git push [$there]
」不說推什麼,我們已經使用了傳統的「匹配」的語義至今(所有的分支都只要遙遠,目前已經有同名的分支那邊發送到)。我們將使用「
simple
」語義將當前的分支具有相同名稱的分支,僅在當前分支被設定爲與遠程分支整合。
有一個用戶首選項配置變量「push.default
」來改變這一點。
所以從mechanicalfish的answer建立,可以定義一個別名,用正確的雙引號("
)逃脫(\"
):
git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"
git pu origin
Sc0ttyD提出in the comments以下別名:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
在多條線路:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] &&
git push -u origin $(git symbolic-ref --short HEAD) ||
git push'
感謝您展示如何設置別名。雖然我不清楚你的答案的第一部分的連接或相關性。 – John
@John我的觀點是:你會繞過一個本應該是故意的步驟。你可以設置別名,但是我想向其他讀者說明爲什麼這個顯式的'-u'選項存在,爲什麼沒有配置使所述選項自動(因此是別名)。 – VonC
我在我的.zshrc中有一個zsh別名列表。我修改了這個答案來創建下面的zsh別名:'alias gpu ='[[-z $(git config「branch。$(git symbolic-ref --short HEAD).merge」)]] && git push -u origin $(git symbolic-ref --short HEAD)|| git push'' – Sc0ttyD
我有同樣的問題。我發現這個別名(的.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
用法:每次新的分支git track
一次(當前已簽出)。然後只是像往常一樣推:)
@VonC和@Frexuz的答案很有幫助,但他們的解決方案都會給我一個錯誤。同時使用他們的答案,我拼湊起來的東西,對我的作品:
[alias]
pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push
這導致執行任意git push -u origin $BRANCHNAME
或git push
,取決於其上游(財產branch.$BRANCHNAME.merge
)是否定義。
進入命令行上此別名將需要換碼,所以它可能是最容易使用編輯器插入正確的文件($HOME/.gitconfig
(全球),.git/config
(本地),或/etc/gitconfig
(系統))
這是最直接和最完整的答案。要打開默認編輯器而不搜索文件,你可以'git config --global -e' –
我使用這個簡單的Bash腳本解決了這個問題。它不適用於現有分支,但如果使用此功能創建所有分支,則始終會自動設置上游分支。
function con { git checkout -b $1 && git push --set-upstream origin $1; }
的$ 1代表你con
後通過第一個參數,所以它只是像做:
git checkout -b my-new-branch && git push -u my-new-branch
...:
con my-new-branch
我做了一個混帳擴展與有用的腳本,包括這一個:
usage: git line push
Push the current branch and set an upstream if needed.
git fetch origin
git push origin
^這把逆流我
你檢查,如果有可能使用'push.default'和'分支。 [git-config(1)](https://www.kernel.org/pub/software/scm/git/docs/git-config.html)中的 .merge'選項? –
2013-07-25 01:08:48
我將'push.default'設置爲'current' - 這就是我可以在沒有refspec或上游的情況下說'git push origin'。但它無助於自動設置上游。 – John