2013-11-18 3 views
1

Use-Case:Remove версия История одного файла в Git

Я создаю клон моего хранилища, и я хочу, чтобы сохранить историю версий каждого другого файла, кроме одного, позволяет называть его «черно- sheep.json»


После единственный подход, который я обнаружил еще:

  1. Создать временную копию черного sheep.json, скажем tmp.json
  2. Затем удалите всю историю черного sheep.json с помощью этой команды
git filter-branch --force --index-filter \ 
    'git rm --cached --ignore-unmatch black-sheep.json' \ 
    --prune-empty --tag-name-filter cat -- --all 

.3. Наконец, переименуйте tmp.json в black-sheep.json

Мне не нравится это решение! Есть ли способ лучше ?


Я только что понял другой подход, я могу скворовать все коммиты для этого конкретного файла в одну фиксацию.

Однако при таком подходе у меня есть следующие сомнения

  • Как сделать это в не интерактивном режиме?
  • Как это сделать через несколько не последовательных коммитов?

Примечание:

  • Все коммиты включают только один файл.
  • Мне нужно реализовать это в коде.

ответ

1

1/Как это сделать в неинтерактивном режиме?

Единственное решение, которое я знаю будет использовать git rebase --interactive --autosquash, но оно основано на одинаковых совершивших сообщениях: если у вас нет тех, вам нужно будет:

  • первым, rebase --interactive в целях редактировать эти сообщения
  • вторых, использовать autosquash

Но это испортит «неинтерактивную» часть процесса.

2/Как это сделать через несколько не последовательных коммитов?

Вот что autosquash делает, но, на мой взгляд, git filter-branch остается точным инструментом omre делать то, что вы хотите в один (неинтерактивного) шаг.
Другим инструментом может быть BFG Repo-Cleaner, если вам не нравится синтаксис команды git filter-branch.

1

JGit действительно предоставляет API для выполнения интерактивной перезагрузки.

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

Так обратно sheep_revA.json в новой редакции становится черно-sheep_revB.json

И удалить черный sheep_revA.json

Это не очень утонченный подход но он сдерживает сложность и выполняет работу (удалите историю для black-sheep.json)

Смежные вопросы