Каковы варианты использования для локальных филиалов, отслеживающих другие локальные филиалы?

В Git мы можем сделать это:

$ git checkout -b testbranch --track master
Branch testbranch set up to track local branch master.
Switched to a new branch 'testbranch'

Каковы варианты использования таких веток?

18 голосов | спросил Eli Bendersky 26 WedEurope/Moscow2012-12-26T23:37:59+04:00Europe/Moscow12bEurope/MoscowWed, 26 Dec 2012 23:37:59 +0400 2012, 23:37:59

2 ответа


0

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

  • У вас могут быть псевдонимы или сценарии, которые работают с ветками вверх по течению (например, через сокращение @{u}; см. ---- +: = 1 = + ----). Если это так, настройка локальной ветви для отслеживания другой локальной ветви позволит вам протестировать псевдонимы или сценарии, не затрагивая удаленный репозиторий или создавая временный фиктивный репозиторий.

  • Предположим, вы работаете над новой локальной веткой с именем git help revisions вне вашей локальной foo (которая отслеживает master), но вы не готовы опубликовать origin/master в foo. Или, может быть, вы никогда не захотите нажать origin - возможно, коммиты добавили кучу отвратительных origin вызовы, которые вы добавили, чтобы помочь с отладкой. В любом случае, всякий раз, когда printf() обновляется, вы хотите перебазировать master на foo. Обычно вы просто набираете master, но если вы похожи на меня, вы можете часто вводить просто git rebase master по привычке. Если вы это сделаете, вы получите это сообщение об ошибке:

    git rebase

    У вас может возникнуть соблазн сделать это:

    $ git rebase
    There is no tracking information for the current branch.
    Please specify which branch you want to rebase against.
    See git-rebase(1) for details
    
        git rebase <branch>
    
    If you wish to set tracking information for this branch you can do so with:
    
        git branch --set-upstream-to=origin/<branch> foo
    

    , но это может иметь разрушительные последствия, если вы привыкли печатать git branch --set-upstream-to=origin/master foo каждые несколько коммитов (в конечном итоге вы нажмете ваша незавершенная работа фиксируется в вашей локальной git push ветке foo ветка origin, если у вас есть master установлен в push.default, как я).

    Вместо этого вы можете настроить локальную ветку upstream для отслеживания вашей локальной foo ветка. Теперь ваша привычка печатать master делает то, что вы хотите, и рассеянный git rebase только испортит вашу локальную ветку git push, а не master ветка origin.

    Но обычно не стоит настраивать локальную ветвь для отслеживания другой локальной ветки только для master. Я думаю, что легче жить с запоминанием, чтобы ввести git rebase вместо git rebase master. Если я забываю, я получаю сообщение об ошибке, которое пробуждает мою память, и я пытаюсь снова. Ничего страшного.

ответил Richard Hansen 31 MonEurope/Moscow2012-12-31T23:36:11+04:00Europe/Moscow12bEurope/MoscowMon, 31 Dec 2012 23:36:11 +0400 2012, 23:36:11
0

Я пробую эту команду, и обнаружу, что master будет работать как «действительно» удаленная ветвь.

В .git /config было добавлено следующее:

[branch "testbranch"]
    remote = .
    merge = refs/heads/master

И вы можете вытащить из мастера, используя $git pull, и протолкнуть в мастер, используя

$git push . testbranch:master

Или вы можете просто ввести $git push, добавив следующую конфигурацию в .gitconfig

[push]
    default = upstream
ответил pktangyue 27 ThuEurope/Moscow2012-12-27T13:13:17+04:00Europe/Moscow12bEurope/MoscowThu, 27 Dec 2012 13:13:17 +0400 2012, 13:13:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132