мерзавец - чернослив <refspec> - PullRequest
0 голосов
/ 26 сентября 2018

Я думал, git fetch --prune origin <refspec> делает следующее

a) обрезает устаревшие удаленные ветви отслеживания

b) затем выполняет выборку как git fetch origin <refpec> do

, но читает doc ,

git fetch --prune origin refs/tags/*:refs/tags/* ведет себя не так, как описано выше.Итак, поведение обрезки зависит от refspec.

Как будет вести себя сокращение с fetch по отношению к переданному refspec?Я использую git 2.18

РЕДАКТИРОВАТЬ: добавив больше наблюдений, которые я видел:

My remote.origin.fetch = remote.origin.fetch=refs/heads/*:refs/remotes/origin/*

Почему я упоминаю это?Из-за этого странного отношения

Случай 1: git fetch --prune --dry-run origin

Это удаляет ветви удаленного отслеживания, отсутствующие в удаленном хранилище.Затем извлекается как git fetch --dry-run origin

Случай 2: git fetch --prune --dry-run origin refs/heads/*:refs/remotes/origin/*

Этот первый удаляет все мои удаленные ветви отслеживания (обратите внимание, что jk требуется обрезка и не воссоздана), а затем создает их снова, а затем обновлять их.Странный !!Вот пример:

- [deleted]         (none)     -> origin/holo
- [deleted]         (none)     -> origin/ioio
- [deleted]         (none)     -> origin/jj
- [deleted]         (none)     -> origin/jkkk
- [deleted]         (none)     -> origin/jk
* [new branch]      holo       -> holo
* [new branch]      ioio       -> ioio
* [new branch]      jj         -> jj
* [new branch]      jk         -> jkkk
= [up to date]      holo       -> origin/holo
= [up to date]      ioio       -> origin/ioio
= [up to date]      jj         -> origin/jj
= [up to date]      jkkk       -> origin/jkkk

Случай 3: git fetch --prune --dry-run origin master или git fetch --prune --dry-run origin master:master

Ничего не удаляет (мастер существовал и в удаленном репо, но были ветви удаленного отслеживанияв моем местном, который нуждался в сокращении, но это не касалось этого).После этого ведет себя как git fetch --dry-run origin master

 * branch            master     -> FETCH_HEAD
 = [up to date]      master     -> origin/master

Случай 4: git fetch --prune --dry-run origin refs/tags/*:refs/tags/*

Сначала просто удаляет теги, а затем ведет себя как git fetch --dry-run origin refs/tags/*:refs/tags/*

Случай 5: git fetch origin --prune --verbose --dry-run master:refs/remotes/origin/kk

(Предполагается, что ветка kk больше не существует в удаленном репо)

Эта операция удаляет refs/remotes/origin/kk, а затем воссоздает ееи обновления.

 - [deleted]         (none)     -> origin/kk
 = [up to date]      master     -> origin/kk
 = [up to date]      master     -> origin/master

Итак, случай 1 и случай 4 - это то, что, как я думал, должно вести себя, как объяснялось в начале моего вопроса.Случай 2, Случай 3 и Случай 5 не следовали схеме.Итак, что я должен сделать вывод тогда?Как поведет себя обрезка с fetch по отношению к переданному refspec?Есть ли какая-то общая картина среди всего, чем мы можем объяснить поведение?

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