Могу ли я зафиксировать файл с помощью git, но автоматически игнорировать его при выполнении git svn dcommit?

Сейчас я начинаю применять Git для своего личного рабочего процесса в офисе SVN, поэтому git-svn - это инструмент, на который я буду сильно полагаться. Одна проблема, с которой я столкнулся, и которую я не знаю, как решить, - это как игнорировать в одном направлении.

Конкретный вариант использования для меня заключается в том, что наш файл сборки ant ссылается на такие вещи, как svn и svnversion. Очевидно, что если я использую git-svn, я не планирую использовать ни один из них. Я заменил их в моем локальном build.xml эквивалентами git, которые работают нормально.

Однако я явно не хочу фиксировать это изменение в git svn dcommit. Я хочу сохранить это изменение локально и зафиксировать его локально, чтобы не потерять его, но я не хочу, чтобы оно когда-либо возвращалось в основное репозиторий SVN, потому что это в значительной степени нарушит использование SVN всей компанией. , если я сделаю. Аналогичный случай с использованием только SVN представлен в этом вопрос.

Есть ли какое-либо решение, которое позволило бы мне зафиксировать build.xml локально, продолжить принимать изменения build.xml из SVN (который также имеет много вещей, не связанных с SVN), и никогда не фиксировать его резервную копию с помощью dcommit, не прыгая через обручи каждый раз, когда я пытаюсь совершить?


person Matt D    schedule 08.03.2012    source источник


Ответы (1)


Да, ты можешь.

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

git update-index --assume-unchanged <file>

Если вы хотите перестать игнорировать изменения для этого файла (например, из-за того, что вы внесли изменение в build.xml, которым вам действительно нужно поделиться с другими членами команды), используйте:

git update-index --no-assume-unchanged <file>

Предупреждение: если вы добавляете файл напрямую с git add <file>, предполагается, что вы действительно имеете в виду, что хотите добавить этот файл, и директива --assume-unchanged будет проигнорирована.

person John Feminella    schedule 08.03.2012
comment
Кажется, это работает, но меня беспокоит то, что технически я бы не стал фиксировать это в репозитории Git, верно? Я хочу, чтобы он был привязан к репозиторию Git (я не хочу, чтобы эти изменения снова вносились, если они каким-то образом будут возвращены / удалены локально), но я хочу, чтобы git svn их игнорировал. Мне не нравится идея иметь рабочие изменения, которые ни к чему не привязаны. Но это сработает как одно из возможных решений. Спасибо! - person Matt D; 08.03.2012
comment
Вы не можете этого сделать, и по уважительной причине. Если бы это было возможно, вы бы отправляли коммиты, хеши которых отличались от локальных в вашем репо. Это было бы большим запретом и нарушило бы целостность вашего репозитория, что намного хуже, чем случайная фиксация. - person John Feminella; 08.03.2012
comment
Понял. Спасибо за быстрое объяснение. Думаю, мне просто нужно придумать способ изменить свой рабочий процесс. Я полагаю, я создам отдельную ветку с ТОЛЬКО модификациями build.xml и оставлю ее открытой / помеченной, чтобы я мог восстановить файлы в случае, если я сделаю ошибку в любых других ветках. Спасибо за решение, Джон! - person Matt D; 09.03.2012
comment
К сожалению, я столкнулся с проблемой, заключающейся в том, что, хотя предполагается, что файл не был изменен, git не позволяет мне переключать ветки из-за незафиксированных изменений. Жалко, потому что это одна из главных причин, по которой я не могу принять Git в качестве регулярной части рабочего процесса. - person Matt D; 19.03.2012