Каждый раз, когда я хочу надавить свои обязательства (git commit -m "message"
, git push origin <branch>
), я делаю тягу (git pull origin <branch>
).
Есть ли способ сделать git сделать тягу, прежде чем выполнить мой толчок? (На одной и той же отрасли)Как заставить тянуть до толчка
ответ
Git способ сделать это с помощью customize Git hooks.
В вашем случае вам нужно будет перейти в каталог .git/hooks
в вашем репозитории и добавить файл с именем pre-push
, который является скриптом по вашему выбору, например. (Баш в этом примере)
#!/bin/bash
echo "pulling ..."
git pull
Этот скрипт будет вызываться, когда вы делаете git push
и до фактического толчка.
Очевидно, что это всего лишь очень наивный образец, но я надеюсь, что вы получите эту идею. В этом каталоге уже есть образцы. Прокомментируйте, если что-то еще неясно.
Большое вам спасибо. Это лучший и разумный путь. –
Спасибо @AliFarhoudi – creativeChips
Если вы хотите command2
работать, если и только если command1
успешно (в основном возвращает 0), запускаемых с помощью двойной амперсанд знак &&
, зажатой между ними:
command1 && command2
И, запустить command2
после command1
успешно или даже если не удается, выполняется с использованием запятой ;
:
command1 ; command2
я использовал прежнюю для git pull && git push
, а позже один для git pull ; date
Спасибо @ saurav-sahu. Это полезно, но я хочу знать, есть ли какой-либо способ, если я забыл '' 'pull''' и просто запускал' '' push''', он как-то предупреждает меня или запускает '' 'pull''' автоматически. В настоящее время он объединяет последнее коммитирование других с моей фиксацией. –
Ok..I see..I будет проверять и сообщать вам об этом. Кстати, псевдоним, связанный с пробелом, как 'git push', не поддерживается в соответствии с моими знаниями. –
'git push' уже собирается отклонить, если вы не обновляетесь с пультом дистанционного управления. Просто нажмите. Акт толкания спрашивает, можно ли нажать. Если есть причина, по которой вы не можете нажать, вы не сможете нажать. Тогда вы можете беспокоиться о том, что делать. – Shaggy
Вы на самом деле не нужно тянуть до нажатия: если есть фиксации на удаленной стороне у вас нет на месте, мерзавец толчок будет завершаться сообщение сообщение:
Pushing to [email protected]:<user>/<repo>.git
To [email protected]:<user>/<repo>.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/BigMeanCat/CMDA'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Если у вас есть контроль над удаленным сервером, вы можете установить там:
git config --system receive.denyNonFastForwards true
В целом, вы можете easily define an alias combining both commands:
git config alias.pullpush '!git pull && git push'
Если тянуть не удается, толчок не будет выполнен.
Наконец, вы можете комбинировать любую последовательность команд в Баш скрипт, не названный
git-pullpush
(без расширения, исполняемый, хранящийся в папке, на которую ссылается $PATH
)
Было бы быть обычным сценарием bash (который работает даже в Windows, поскольку он будет интерпретироваться в basys).
#!/bin/bash
# you can add any command you want
git pull && git push
И вы могли бы назвать его git pullpush
(как псевдоним)
Спасибо VonC. Это очень хорошо, но это не то, что я хотел. Должен быть шаг для фиксации и установки сообщения для моего фиксации. –
@AliFarhoudi Вот почему я упоминаю в сценарии «вы можете добавить любую команду, которую хотите». Это включает любой шаг, который вам нужен. – VonC
на основе замечаний Op, они, по всей видимости, пытаются избежать слияния совершить между недавними фиксациями и фиксациями на пульте дистанционного управления, который, как правило, порождаемая a git pull
, когда локальная и удаленная истории расходятся.
Явный способ сделать это - сначала извлечь и переустановить и, наконец, нажать.
git fetch
git rebase origin/master
git push
Второй способ сделать это пройти --rebase
при вызове git pull
.
git pull --rebase
Наконец, можно сделать такое поведение git pull
по умолчанию, установив конфигурацию.
git config --global pull.rebase true
вы можете создать псевдоним для этого - в конфигурационном файле мерзавца добавить [псевдоним] mypush = мерзавец тянуть -r && GIT толчок – Divisadero
, но я не знаю, если вы должны сделать это – Divisadero
doesAirExist && doBreathing –