Git setup удаленное отслеживание ветки - PullRequest
8 голосов
/ 21 февраля 2010

Я хочу отслеживать удаленную главную ветку из нового удаленного репозитория. Оба уже существуют.

Как мне это сделать в git? Я не могу понять это правильно. Я попробовал:

git remote add otherRepo git://...
git branch -t myTrack otherRepo/master

Однако я получаю следующую ошибку:

fatal: Not a valid object name: 'otherRepo/master'.

Ответы [ 2 ]

12 голосов
/ 21 февраля 2010

Как указано в комментариях: git remote add otherRepo … только настраивает пульт, он ничего не извлекает из него. Вам нужно будет запустить git fetch otherRepo для извлечения веток удаленного репозитория, прежде чем вы сможете создавать локальные ветки на их основе.


(ответ на дальнейший комментарий ОП)

Если вы хотите отслеживать только одну ветку из удаленного репозитория, вы можете перенастроить свойство fetch вашего удаленного сервера (remote.otherRepo.fetch).

# done as a shell function to avoid repeating the repository and branch names
configure-single-branch-fetch() {
    git config remote."$1".fetch +refs/heads/"$2":refs/remotes/"${1}/${2}"
}
configure-single-branch-fetch "$remoteName" "$branch"
# i.e. # configure-single-branch-fetch otherRepo master

После этого git fetch otherRepo будет извлекать только ветку master удаленного репозитория в otherRepo/master "ветку удаленного отслеживания" в вашем локальном репозитории.

Чтобы очистить другие «ветви удаленного отслеживания», вы можете удалить их все и повторно выбрать только ту, которую хотите, или выборочно удалить все из них, кроме той, которую вы хотите:

git for-each-ref --shell --format='git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv
# remove the -nv if the commands look OK, then
git fetch otherRepo

# OR

git for-each-ref --shell --format='test %(refname:short) != otherRepo/master && git branch -dr %(refname:short)' refs/remotes/otherRepo | sh -nv
# remove the -nv if the commands look OK

Если вы решили, что хотите отслеживать более одной удаленной ветви, но не все из них, вы можете иметь несколько конфигураций выборки (с помощью git config --add remote."$remoteName".fetch … или с помощью git config --edit для непосредственного дублирования и редактирования строки в репозитории файл конфигурации).

Если вы также хотите избежать выборки тегов с пульта, настройте свойство tagopt вашего пульта (remote.otherRepo.tagopt).

git config remote."$remoteName".tagopt --no-tags
# i.e. # git config remote.otherRepo.tagopt --no-tags
4 голосов
/ 21 февраля 2010

Вы можете попробовать

git checkout -b myTrack otherRepo/master 

Это создаст новую ветку myTrack, которая отслеживает ветку otherRepo / master.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...