Извлеките все неснятые изменения из репозитория git. - PullRequest
3 голосов
/ 27 февраля 2011

Мне нужно получить все из нескольких разных репозиториев (все удаленные ветки и все изменения в этих ветках).Я попытался git pull --all, но по какой-то причине я получаю следующее сообщение:

There are no candidates for merging among the refs that you just fetched.
Generally this means that you provided a wildcard refspec which had no
matches on the remote end.

Так как мне обеспечить, чтобы я получил все изменения из хранилища (не зная, какие ветви находятся на другомконец, если возможно)?

Вся помощь приветствуется и спасибо заранее!

Ответы [ 2 ]

6 голосов
/ 27 февраля 2011

Вообще говоря, это действительно очень плохая идея.Не делай этого.«Все удаленные ветви» часто включают в себя код незавершенного производства, заброшенный код, конфликтующие реализации одной и той же функции и т. Д. Попытка объединить их все в локальное дерево - это путь к катастрофе.

Теперь,если бы вы действительно хотели сделать очень глупую вещь, которую вы предложили, вы могли бы сделать это примерно так:

git fetch remote_source
git merge $(git branch -r | grep remote_source)

Теперь, если все, что вы действительно хотите сделать, это иметьлокальная копия всех удаленных изменений, не пытаясь объединить их с вашим деревом, тогда вам вообще не нужно делать извлечение или объединение;git fetch remote_source делает все это за вас.Конечно, он не создает локальные ветви, сопоставленные с удаленными, - но он сносит удаленные ветви, и вы можете создавать локальные ветви, когда и когда они вам нужны, без дальнейшей связи с удаленным источником.


Учитывая дальнейшее описание проблемы в комментариях, звучит так, что вы действительно хотите переместить все ветви со старого пульта на новый, не для объединенияих в одно дерево.Для этого вам, вероятно, понадобится что-то вроде следующего:

args=()
for remote_branch in $(git branch -r | grep OLD_REMOTE/); do
  branch_name=${remote_branch#*/}
  args+=( "${remote_branch}:${branch_name}" )
done
git push NEW_REMOTE "${args[@]}"
2 голосов
/ 27 февраля 2011

Это кажется очень плохой идеей. Но я думаю, вы знаете, что делаете.

Я использую следующий bash one liner, чтобы сделать push для всех пультов, которые я изменил, чтобы вместо них делать pull.

for i in $(git remote); do git pull $i master; done;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...