Я не хочу проверять конкретную ветку даже случайно - PullRequest
1 голос
/ 13 апреля 2019

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

Как я могу сказать git не проверять ветку A?Он не существует локально, он создается автоматически из origin / A.Итак, как мне остановить авто-создание при оформлении заказа -b?Настройка

[branch "A"]
  remote = fubar

не помогает.

Ответы [ 2 ]

4 голосов
/ 13 апреля 2019

Когда вы запускаете:

git checkout foo

и ветвь foo не существует, но ветвь origin/foo существует , Git проверяет коммит, на который origin/foo указывает,затем создает foo с origin/foo, установленным как восходящий поток foo, указывая на тот же коммит.Это называется Режим DWIM , для Делайте то, что я имею в виду: Git предполагает, что вы имели в виду для ввода:

git checkout --track origin/foo

и как-то случайнопропущена часть --track origin/.

Git не имеет возможности полностью отключить этот режим DWIM.Но есть три случая, когда DWIM либо не срабатывает, либо не может срабатывать.Это:

  • Ветвь foo уже существует, что указывает на некоторую фиксацию.Поскольку ваши имена веток ваши , вы можете просто создать ветку с именем foo, чтобы существовало foo.Выберите коммит, на который он должен указывать, и создайте его:

    branch foo a123456
    

    (при условии, конечно, что a123456 является допустимым коммитом).Теперь git checkout foo переключит вас на коммит a123456 и ветвь foo.

  • Ветвь foo не существует, но не существует origin/foo.Нет origin/foo имени для удаленного отслеживания, которое можно было бы указать в качестве аргумента git checkout --track origin/foo.Теперь git checkout foo просто потерпит неудачу.

    Ваши имена для удаленного отслеживания ваши , так что вы можете просто удалить origin/foo, но есть загвоздка.Удаление легко:

    git branch -r -d origin/foo
    

    Теперь это прошло!К сожалению, запуск git fetch вернет его обратно, пока Git в origin имеет ветку с именем foo, потому что вы сказали своему Git - возможно, непреднамеренно;это значение по умолчанию - ваш Git должен рабски обновлять или заново создавать все ваши origin/* имена, чтобы они соответствовали именам ветвей origin каждый раз, когда вы запускаете git fetch для удаленного origin.Это означает, что для создания флешки удаления вам нужно будет убедить Git на origin удалить ветку foo.

    Это может быть возможно, а может быть даже легко.Это может быть то, что вы должны сделать здесь.Но Git origin не твой Git, и я не могу сказать тебе, подходит ли это для чужого Git.Вам придется найти или выяснить это для себя.

  • Наконец, режим DWIM завершается с ошибкой , если существует два или более возможных foo с.То есть git checkout foo стал git checkout --track origin/foo, но он сделал это только , потому что , перечислив все ваших имен для удаленного слежения, единственное, которое напоминало foo, было origin/foo.

    Вы можете иметь более одного пульта.На самом деле, вы можете иметь более одного пульта даже для одного Git-репозитория.Таким образом, вы можете просто добавить второй пульт:

    git remote add origin2 <url>
    

    , где <url> - это тот же URL-адрес, который вы используете для origin, затем запустите git fetch.Теперь у вас будет не только origin/foo, но и origin2/foo, и git checkout foo не будет знать , какой для DWIM, поэтому он не будет.

    Недостаток здесьчто это также приведет к сбою всех других DWIM git checkout операций.Если вас это не беспокоит, вы можете остановиться здесь.Если это так, вы можете это исправить: вы можете настроить origin2 как трекер с одной ветвью , изменив настройку для origin2.Вы можете сделать это после создания дополнительного пульта, отредактировав .git/config, или вы можете сделать это при , создав origin2, используя:

    git remote add origin2 <url> -t foo
    

    , так что origin2 являетсяодноотраслевой трекер.Теперь у вас будет только origin2/foo, а не origin2/master, не origin2/develop и никаких других подобных имен.

0 голосов
/ 13 апреля 2019

Вы можете создать псевдоним своей ветви. Для него вы можете использовать нижеприведенную команду:

git symbolic-ref refs/heads/branch1 refs/heads/branch2

Так что здесь, когда вы попытаетесь оформить заказ в branch1 , вы попадете в branch2 .

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