Игнорирование файла: gitignore не делает то, что я хочу - PullRequest
3 голосов
/ 11 февраля 2012

Я искал интернет и ТАК, но не смог найти решение этой проблемы.Я использую Git.У меня есть код, который имеет филиал B1 на компьютере C1.На другом компьютере C2 я клонировал эту ветку и локально сделал еще одну ветку B2.B2 не передается в центральное хранилище.

B1 и B2 совершенно одинаковы, за исключением одного файла FILE1.Поэтому я добавил этот файл в .gitignore и зафиксировал в B2.Теперь, когда я делаю кодирование в B1, я помещаю его в центральный репозиторий.Чтобы получить эти изменения на компьютере C2, я делаю

git pull origin B1

, пока я в филиале B2.Но это выдает сообщение об ошибке:

CONFLICT (content): Merge conflict in FILE1

Я хотел спросить, есть ли лучший способ перенести изменения, сделанные в B1, в B2 (без переноса FILE1) или как я могу улучшить свой текущий метод.Спасибо за помощь, так как я новичок в Git.

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

Файлы .gitignore используются для игнорирования неотслеживаемых файлов, таких как скомпилированные *.o файлы. После того, как файл был передан в Git, .gitignore больше не применяется.

Обычный способ решить вашу проблему - создать базовый «образец» файла и сохранить его в хранилище (вместо реального файла). Например, если у вас есть файл с именем foobar.config, создайте файл foobar.config.sample с подходящим содержимым и поместите его в хранилище. Также удалите файл foobar.config. Затем для каждой проверки, где вам нужен файл конфигурации, скопируйте foobar.config.sample в foobar.config и отредактируйте при необходимости.

Другой способ - заставить ваш код распознавать «локальный» файл конфигурации. Таким образом, вы можете поместить общие части foobar.config в хранилище, и ваш код также ищет файл foobar.config.local и заменяет любые настройки в основном файле foobar.config локальными настройками.

1 голос
/ 11 февраля 2012

Если вы случайно зарегистрировали файл foo.txt и можете создать его другим способом (например, путем компиляции некоторых источников), вы можете git rm /path/to/foo.txt удалить его из системы контроля версий, а затем .gitignoreи делай что хочешь.

1 голос
/ 11 февраля 2012

Я думаю, вы неправильно понимаете цель .gitignore:

Файл gitignore указывает намеренно не отслеживаемые файлы, которые git должен игнорировать. Файлы, уже отслеженные git, не затрагиваются.

Так что, если ваш файл уже отслеживается Git (что, кажется, в вашем случае), добавление его в .gitignore ничего не меняет.

Когда вы получаете конфликт слияния, это означает, что файл изменился как в вашем текущем рабочем дереве, так и в том месте, откуда вы выполняете слияние (в вашем случае, в удаленный репозиторий). Вы ** должны * разрешить все конфликты слияния. Существует множество ресурсов для разрешения конфликтов слияния, среди них Руководство пользователя Git . Вы также можете указать, что Git использует локальную или удаленную копию для разрешения конфликтов :

git pull -Xtheirs origin B1

Если вы никогда не хотели отслеживать файл, вы можете отследить его:

git rm --cached myfilename

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

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