Клонировать хранилище и ветку проверки - PullRequest
0 голосов
/ 26 марта 2020

Я локально клонировал частный репозиторий с 3 ветками - master, dev и staging. Когда он клонируется, я нахожусь в главной ветке. Когда я перечисляю ветви:

git branch -a

Я вижу все ветви. Когда я запускаю:

git checkout dev

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

Ответы [ 3 ]

2 голосов
/ 26 марта 2020

Это предположение, но я воспроизвел поведение:

sh-3.2$ mkdir txx
sh-3.2$ cd txx
sh-3.2$ git init
Initialized empty Git repository in ...
sh-3.2$ echo test branch name thing > README.md
sh-3.2$ git add README.md
sh-3.2$ git commit -m initial
[master (root-commit) 7dc0be2] initial
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
sh-3.2$ echo this is a file named dev > dev
sh-3.2$ git add dev
sh-3.2$ git commit -m 'add file named dev'
[master ac01ba6] add file named dev
 1 file changed, 1 insertion(+)
 create mode 100644 dev
sh-3.2$ git remote add origin .
sh-3.2$ git update-ref refs/remotes/origin/master master
sh-3.2$ git update-ref refs/remotes/origin/dev master
sh-3.2$ echo foo >> dev
sh-3.2$ git checkout dev

Кажется, здесь ничего не произошло, но на самом деле что-то произошло: файл dev был извлечен, разрушительно. Вот его содержание:

sh-3.2$ cat dev
this is a file named dev

и вот подтверждение того, что мы все еще на master:

sh-3.2$ git status
On branch master
nothing to commit, working tree clean

working tree clean является следствием уничтожения обновленного dev, заменив его копией, извлеченной из индекса, на git checkout.

Обратите внимание, что для всего этого требуется чуть более старая версия Git:

sh-3.2$ git --version
git version 2.20.1

Более современная. говорит нам о проблеме. Если вы выполните то же самое в Git 2.24, то получится:

$ git checkout dev
fatal: 'dev' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate

Именно из-за этого git checkout теперь представляет собой две отдельные команды, git switch и git restore. Использование git switch:

$ git switch dev
M       dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'

делает желаемую вещь.

0 голосов
/ 26 марта 2020

Вы можете попробовать команду ниже и посмотреть, работает ли она "git clone --branch url". Она выбирает все ветви и проверяет ветку, указанную нами.

0 голосов
/ 26 марта 2020

Я предполагаю, что вы не получили удаленную ветку. По умолчанию git checkout получает только одну ветку. Вам нужно сделать комбинацию

git fetch

с последующим

git check dev dev

После этого вы должны увидеть сообщение

Переключено на ветку 'dev'

Ваша ветка актуальна с 'origin / dev'

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