Как перезаписать удаленные определенные ветки в git fetch?

Я установил центральный сервер резервного копирования, на котором все репозитории разработчиков добавлены как удаленные. Я беру каждый день со всех пультов. Это дает мне все ветви разработчиков, такие как dev1/master, dev1/FeatureA, dev2/master, dev2/Hotfix и т. Д. Я делаю это, чтобы иметь резервную копию пользовательских репозиториев на случай сбоя локальной системы. Все в порядке.

Проблема, с которой я сталкиваюсь: когда, скажем, репо dev1 имеет 2 ветки Br1 и Br2, которые отслеживаются при резервном копировании через dev1/Br1 и dev1.Br2 соответственно. Теперь разработчик удаляет одну из веток, скажем Br1. Я делаю выборку в EOD на сервере резервного копирования. Сервер резервного копирования по-прежнему показывает, что dev1 имеет ветвь Br1.

Как я могу заставить fetch заменить все существующие ветки новыми, т. е. также удалить dev1/Br1, если удаленное (dev1) репо удаляет ветку?


person Mudassir Razvi    schedule 23.06.2014    source источник
comment
Я предполагаю, что вы используете fetch = строки для сопоставления имен веток репо. Просто добавьте --prune в свой git remote update или git fetch. Обратите внимание, что некоторые старые версии git иногда не удаляются с помощью некоторых команд, поэтому, если одна не работает, попробуйте другую или обновите свою версию git.   -  person torek    schedule 23.06.2014
comment
также интересная попытка: stackoverflow.com/questions/2129214/   -  person user3415653    schedule 23.06.2014
comment
Пакеты @ user3415653 недоступны. У меня есть резервная копия более 100 пользователей, и объединение каждого и разделение слишком дорого.   -  person Mudassir Razvi    schedule 23.06.2014
comment
@MudassirRazvi затем используйте корпоративное решение, например stash (atlassian.com/software/stash)   -  person user3415653    schedule 23.06.2014
comment
@ user3415653: Это тоже не вариант. Ответ Палека ниже работает потрясающе. Не могли бы вы предложить способ обрезки тегов вместе с ветками. Это было бы полезно ... :)   -  person Mudassir Razvi    schedule 23.06.2014
comment
@MudassirRazvi я думаю git fetch <remote> --prune --tags   -  person user3415653    schedule 23.06.2014
comment
git fetch ‹remote› --prune --tags по какой-то причине удаляет все ветки удаленного отслеживания. никогда не используйте это ..: p   -  person Mudassir Razvi    schedule 23.06.2014
comment
@MudassirRazvi Вам действительно стоит подумать об использовании stash или подобного продукта.   -  person Zarathustra    schedule 23.06.2014


Ответы (1)


Вам понадобится что-то вроде:

git fetch --all --prune

Из руководства:

--all
    Fetch all remotes.

-p, --prune
    After fetching, remove any remote tracking branches which no longer
    exist on the remote.
person Palec    schedule 23.06.2014
comment
Спасибо! Работает как шарм. Но есть ли способ обрезать теги? Coz таким образом он отлично удаляет ветки, но теги, удаленные на удаленном компьютере, все еще остаются - person Mudassir Razvi; 23.06.2014
comment
@MudassirRazvi git fetch --all --prune --tags так просто. - person Zarathustra; 23.06.2014
comment
@ Заратустра Согласен. См. stackoverflow.com/q/10491146/2157640 и stackoverflow.com/q/1841341/2157640 - person Palec; 23.06.2014
comment
@MudassirRazvi Если добавление --tags не работает, вы можете вызвать git tag -l | xargs git tag -d перед выборкой в ​​качестве временного решения. Это удалит все теги в репозитории, и они будут извлечены с нуля. - person Palec; 23.06.2014