VSTS Git: хранилище было испачкано удалением .gitignore. Очистка уже выполнена до мастер, но новый Git Clone по-прежнему загружает более 4000 файлов - PullRequest
0 голосов
/ 27 апреля 2018

Мы работаем с VS и VSTS по большей части.

Git: кто-то испортил наш репозиторий, удалив .gitignore и зафиксировав почти 2000 файлов, которые нужно игнорировать, и раздул его на 250 МБ. Мы уже очистили его (должны были выполнить команды cmd git), но при выполнении нового клона git в этом репозитории все еще загружаются дополнительные 2000 файлов, до того, как дельта включится и удалит эти файлы.

Если предположить, что создание совершенно нового репо не является вариантом (по деловым причинам), каков будет лучший способ сделать так, чтобы свежий клон git не загружал игнорируемые 2000 файлов?

В некоторых ветвях все еще есть эти 2000 неочищенных файлов, но нет главной ветки. Мы еще не удалили эти ветви для архивации.

1 Ответ

0 голосов
/ 30 апреля 2018

По той причине, что свежий клон git в этом репо все еще загружает дополнительные 2000 файлов, вызвано тем, кто удаляет .gitignore, а также передает изменения в удаленное репо . Поэтому вам нужно удалить коммит из удаленного репо.

Ниже приведены некоторые параметры, которые вы можете использовать в зависимости от ситуации:

Сначала проверьте историю коммитов для каждой ветви и найдите коммит, который удаляет .gitignore файл:

В VS -> Team Explorer -> Ветви -> щелкните правой кнопкой мыши ветку -> Просмотреть историю -> получить коммит, который удаляет .gitignore (вы можете просмотреть детали коммита, щелкнув правой кнопкой мыши на коммите, и выбрать просмотр коммитов деталей ). Предположим, что идентификатором фиксации является коммит C (как показано на графиках ниже).

  • Если фиксация, которая удалила .gitignore, является последней версией в ветви (как показано в истории фиксации):

    ...---A---B---C   branchname
    

    Затем вы можете сбросить фиксацию и принудительное нажатие на ваше удаленное репо:

    git checkout branchname
    git reset --hard HEAD~
    git push -f
    

    История коммитов на ветке будет:

    ...---A---B    branchname
    
  • Если фиксация, которая удалила .gitignore, не является последней версией в ветви (как показано в истории фиксации):

    ...---A---B---C---D---...---E   branchname
    

    Затем вам нужно удалить коммит C и перебазировать следующие коммиты:

    git checkout branchname
    git checkout <commit id for C>
    git reset --hard HEAD~
    git rebase --onto HEAD <commit id for C> branchname
    git push -f
    

    Тогда история коммитов на ветке будет:

    ...---A---B---D'---...---E'   branchname
    
...