2015-05-15 2 views
1

Я работаю над совместным проектом с удаленным репо. Один из исходных файлов в репо - это файл типа «конфигурация», и я хотел бы сохранить свою собственную локальную копию файла, отличную от той, что находится на удаленном компьютере, без git, смотрящего на файл. То есть, я не хочу, чтобы git отслеживал файл; Я не хочу, чтобы это было совершено, если я использую git commit -a; и я определенно не хочу, чтобы он нажал, когда я использовал git push на пульте дистанционного управления. Я также не хочу удалять его из удаленного репо, поэтому git rm --cached будет ошибочным.Как получить git, чтобы полностью игнорировать файл?

Пара мест (в том числе одна на StackOverflow) предлагается с использованием git update-index --assume-unchanged <config-file>. Казалось, это сработало; если я использую git status, файл не указан как измененный, а git commit -a не пытается его зафиксировать. Однако git все еще мешает мне переключаться между локациями, между «мастером» и моей рабочей ветвью. Если я пытаюсь git checkout master перейти от рабочей ветви к мастеру, или наоборот, я получаю

error: Your local changes to the following files would be overwritten by checkout: 
    <config-file> 
Please, commit your changes or stash them before you can switch branches. 

git checkout -f не помогает:

error: Entry '<config-file>' not uptodate. Cannot merge. 

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

Файл уже указан в моем .gitignore.

Как я могу получить git, чтобы полностью игнорировать мой файл?

+0

Было бы хорошо для вас дополнительные команды? – Alex

+0

@Alex Нет, если я должен делать это каждый раз, когда я переключаю ветви. Если это то, что я могу делать реже, то, может быть. – ajb

+0

У меня действительно есть аналогичная проблема. Мне интересно, есть ли у вас ветка, которую вам не нужно проверять и держать ее параллельно истории. так что это будет что-то вроде 'git commit-ignored && git checkout-ignore ', который вы тогда псевдоним и использовали бы вместе. – Alex

ответ

1

Я бы сказал, что проблема не в инструменте, а в процессе. Я имел дело с этим, прежде чем при развертывании некоторых приложений и думаю, что решение заключается в следующем:

  • переместить файл config в config.sample вместо

  • убедитесь, что копирует развертывание/установка config.sample в config если она не существует

  • не добавляет config мерзавца вообще - не нужно быть отслежены

  • держать в .gitignoreconfig, так что он не совершил случайно в будущем

+1

Я мог бы попытаться представить дело своим коллегам, что файл не должен находиться в репо, и я, вероятно, сделаю это. (Скорее всего, нам даже не нужен образец файла.) Мне просто интересно, есть ли способ сделать это сам. Или поведение git является ошибкой. – ajb

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