Подтвердить что ты не робот

Как настроить git push для автоматической установки upstream без -u?

Я хочу, чтобы git push origin автоматически устанавливал восходящую ссылку, когда я впервые вставляю локально созданную ветвь.

Я знаю о git push -u, но я не хочу думать о том, использовал ли я ранее -u или иным образом установил ссылку на восходящий поток. Другими словами, я хочу, чтобы git push автоматически выполнял эффект git push -u при любом нажатии ветки, которая еще не имеет восходящего потока.

Возможно ли это? Если для этого требуется псевдоним или утилита script, это прекрасно.

4b9b3361

Ответ 1

Так как я не думаю, что это возможно с помощью git config, вот что вы можете сделать в bash:

[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push

Если текущая ветка имеет ветвь удаленного отслеживания, она вызывает git push, иначе она вызывает git push -u

Ответ 2

Примечание: тот факт, что новая политика push по умолчанию "simple" основана на ветке, имеющей восходящий поток, означает:
настройка ветки вверх по течению рассматривается как добровольный шаг, а не скрытая автоматическая

Когда "git push [$there]" не говорит, что нажать, мы использовали традиционную семантику соответствия (все ваши ветки были отправлены на удаленный компьютер, если там уже есть ветки с таким же именем),

Мы будем использовать семантику "simple", которая толкает текущую ветвь к ветки с тем же именем, , только если текущая ветвь настроена на интеграцию с этой удаленной ветвью.
Для изменения этой настройки существует пользовательская конфигурация конфигурации "push.default".


Поэтому, создав mechanicalfish , вы можете определить псевдоним, с правой двойной кавычки (") экранированы (\"):

git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"

git pu origin

Sc0ttyD предлагает в комментариях следующий псевдоним:

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'

Ответ 3

У меня была такая же проблема. Я нашел этот псевдоним (.gitconfig)

[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"

Использование: git track один раз на новую ветку (в настоящее время выведено). Затем просто нажмите как обычно:)

Ответ 4

Ответы @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, в зависимости от того, определена ли его upstream (свойство branch.$BRANCHNAME.merge).

Ввод этого псевдонима в командной строке потребует escape-кодов, поэтому, возможно, проще всего использовать редактор для вставки в правильный файл ($HOME/.gitconfig (глобальный), .git/config (локальный)) или /etc/gitconfig (система ))

Ответ 5

Я решил эту проблему, используя этот простой Bash script. Он не будет работать с существующими ветвями, но если вы создадите все свои ветки с помощью этой функции, вы всегда будете иметь свою ветвь вверх по течению автоматически.

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

Ответ 6

Я сделал расширение git с полезными скриптами, включая этот:

usage: git line push

Push the current branch and set an upstream if needed.

https://github.com/jvenezia/git-line

Ответ 7

git fetch origin
git push origin

^ это устанавливает вверх по течению для меня

Ответ 8

Просто:

$ alias gush="git push -u origin HEAD"