Как добавить вилку в качестве ветки?

Существует множество форков Caffe, например, у MS есть собственный Caffe форк.

Что я хочу сделать, так это сравнить некоторую ветку с основной веткой оригинального Caffe.

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

Я попробовал это:

git clone https://github.com/BVLC/caffe.git
Cloning into 'caffe'...
remote: Counting objects: 32907, done.
remote: Total 32907 (delta 0), reused 0 (delta 0), pack-reused 32907
Receiving objects: 100% (32907/32907), 43.55 MiB | 571 KiB/s, done.
Resolving deltas: 100% (21962/21962), done.

cd caffe_BVLC/

git branch -l
* master

git remote add caffe_MS https://github.com/Microsoft/caffe.git

git remote -v
caffe_MS    https://github.com/Microsoft/caffe.git (fetch)
caffe_MS    https://github.com/Microsoft/caffe.git (push)
origin  https://github.com/BVLC/caffe.git (fetch)
origin  https://github.com/BVLC/caffe.git (push)

git fetch caffe_MS
remote: Counting objects: 409, done.
remote: Total 409 (delta 177), reused 177 (delta 177), pack-reused 232
Receiving objects: 100% (409/409), 136.98 KiB, done.
Resolving deltas: 100% (279/279), completed with 89 local objects.
From https://github.com/Microsoft/caffe
 * [new branch]      bvlc_merge_2016_03_04 -> caffe_MS/bvlc_merge_2016_03_04
 * [new branch]      bvlc_windows_matlab -> caffe_MS/bvlc_windows_matlab
 * [new branch]      master     -> caffe_MS/master
From https://github.com/Microsoft/caffe
 * [new tag]         0.1w       -> 0.1w

git branch -l
* master

git checkout --track caffe_MS/MS
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'caffe_MS/MS' which can not be resolved as commit?

Что я делаю не так, какое имя ветки я должен указать?

Обновление: результат решения @hek2mgl

git clone https://github.com/BVLC/caffe.git
Cloning into 'caffe'...
remote: Counting objects: 33290, done.
remote: Total 33290 (delta 0), reused 0 (delta 0), pack-reused 33290
Receiving objects: 100% (33290/33290), 43.93 MiB | 484 KiB/s, done.
Resolving deltas: 100% (22252/22252), done.
cd caffe
git remote add caffe_MS https://github.com/Microsoft/caffe.git
git fetch caffe_MS master
remote: Counting objects: 379, done.
remote: Total 379 (delta 111), reused 111 (delta 111), pack-reused 268
Receiving objects: 100% (379/379), 130.06 KiB, done.
Resolving deltas: 100% (246/246), completed with 62 local objects.
From https://github.com/Microsoft/caffe
 * branch            master     -> FETCH_HEAD
git diff caffe_MS/master
fatal: ambiguous argument 'caffe_MS/master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

person mrgloom    schedule 05.03.2016    source источник


Ответы (2)


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

Когда вы говорите, что знаете, как сравнивать две ветки, я думаю, вы действительно имели в виду, что знаете, как сравнивать локальные ветки, и что вы упускаете, так это как сравнивать удаленные ветки.

Прежде всего, вы можете увидеть список удаленных веток с:

git branch -r

И вы можете сравнить удаленные ветки, добавив префикс к удаленным именам, например:

git diff origin/master caffe_MS/master

Что касается последней ошибки, непонятно, что вы пытаетесь сделать с git checkout --track caffe_MS/MS. Ваше объяснение касается сравнения ветвей и добавления ветвей, вы никогда не упоминаете об отслеживании. Если вы хотите оформить ветку из ответвления, вы можете использовать тот же синтаксис, что и при проверке исходной ветки:

git checkout -b caffe_MS_master caffe_MS/master
person janos    schedule 05.03.2016

Обновить

Вы используете устаревшую версию git. Обновите до git >= 2, чтобы заставить работать приведенные ниже команды. Я использую 2.4.10.


Следующие команды сделают свое дело:

# Clone repo
git clone https://github.com/BVLC/caffe.git
cd caffe

# Add remote
git remote add caffe_MS https://github.com/Microsoft/caffe.git

# Fetch remote master from fork
git fetch caffe_MS master

# Compare to local master
# We are currently working in the local master that's why it can be omitted
git diff caffe_MS/master
person hek2mgl    schedule 05.03.2016
comment
По какой-то причине git diff --name-only origin/master caffe_MS/master работает, только если я использую git fetch caffe_MS (а не git fetch caffe_MS master, что дает ошибку fatal: ambiguous argument 'caffe_MS/master': unknown revision or path not in the working tree). - person mrgloom; 09.03.2016
comment
Можете ли вы попробовать именно мои шаги и только мои шаги? (Сделать чистый клон) Должно работать, проверял. - person hek2mgl; 09.03.2016
comment
Я удаляю папку caffe (не знаю, что такое чистый клон) и пробовал эти команды во второй раз, смотрите обновление, также git --version дает git version 1.7.9.5. - person mrgloom; 10.03.2016
comment
Ваш git довольно старый, я использую версию 2.4.10. В версии 2 git изменил способ обработки ветвей. - person hek2mgl; 10.03.2016