Как синхронизировать мое локальное git-репо и удалить ветки, которые пропали в удаленном репо - PullRequest
0 голосов
/ 09 февраля 2019

Я видел много похожих вопросов об этом.Я пробовал много способов, но все еще застрял.

У меня есть такой сценарий:

git fetch --prune

for k in $(git branch --merged| grep -E -v "(^\*|master|dev|release|origin)"); do
  if [ -z "$(git log -1 --since='38 week ago' -s "$k")" ]; then
    ## Info about the branches before deleting
    git log -1 --format="%ci %ce - %H $k" -s "$k";
    ## Delete from the remote
    # git push origin --delete "$k";
    ## Delete the local branch, regardless of whether it's been merged or not
    # git branch -D "$k"
  fi;
done

Я вижу:

host:folder user$ clean-up.sh 
2018-05-18 14:46:25 -0700 gituser@company.com - 646766c885324b4f298d55604e0aabc2a00fdb58 feature/some-branch
2018-05-16 19:56:56 -0400 gituser@company.com - 4e09733554eaf5e293ca7c668c19ec1395b361f9 some-other-branch

Итак, эти два следующихветви должны быть удалены:

feature/some-branch
some-other-branch

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

Кто-нибудь знает о хорошем решении?

Еще лучшерешение состоит в том, чтобы вообще не зависеть от локального репо и иметь возможность очищать старые ветки в удаленном режиме, просто зависеть от удаленного репо.

Я пробовал git remote prune origin , но это не такне работает

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Узнал что-то новое.Мне нужно было git branch -r, чтобы посмотреть на удаленные ветки.И когда я это делаю, мне нужно избавиться от «происхождения» из названий веток.И затем, когда я хочу узнать информацию о ветке, мне нужно добавить «origin» обратно. Вот что работает для меня:

for k in $(git branch -r --merged | sed 's/origin\///' | grep -E -v "(^\*|master|dev|release|origin)"); do
  if [ -z "$(git log -1 --since='5 week ago' -s "origin/$k")" ]; then
    ## Info about the branches before deleting
    git log -1 --format="%ci %ce - %H $k" -s "origin/$k";
    ## Delete from the remote
    git push origin --delete "$k";
    ## Delete the local branch, regardless of whether it's been merged or not
    # git branch -D "$k"
  fi;
done
0 голосов
/ 09 февраля 2019

Попробуйте следующую команду:

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