2015-02-03 4 views
2

Я работаю над базой кода, где один файл автогенерируется и изменяется очень часто. Я считаю, что перезагрузка моего локального филиала обычно приводит к возврату к трем путям слияний и сбоев в этом файле. Затем мне нужно исправить файл и продолжить, но это может произойти несколько раз в одной перезагрузке, и из-за характера файла ручное разрешение конфликтов обычно довольно неприятно. Фактически, весь процесс заканчивается неприятным беспорядком и полной потерей времени, поскольку нет никакой добавленной стоимости при попытке объединить этот конкретный файл.Ошибка сбоя Git с автоматически сгенерированным файлом

Учитывая, что он в любом случае воссоздан как часть процесса сборки, есть ли способ, которым я могу сказать Git игнорировать этот файл во время rebase?

Обратите внимание, что я смотрел другие подобные вопросы/ответы, но не видел ничего, что специально предназначалось для этого (хотя, пожалуйста, поправьте меня, если есть что-то там.) Кроме того, для записи я не увлекаюсь этим тип файла, находящегося в управлении версиями, в любом случае, но, боюсь, у меня нет выбора в этом вопросе.

+0

Почему у вас нет выбора в управлении версиями? – cmbuckley

+0

По сути, это часть моего (очень большого) клиента нормального процесса, и есть технические и исторические причины, что это тот случай, который слишком длинный, чтобы войти сюда. Естественно, я выдвинул свои возражения, но я не в состоянии принять это решение. –

ответ

2

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

git rm --cached <path/to/file> 
echo <path/to/file> >> .gitignore 
git add .gitignore 
git commit -m "Removed <path/to/file> from version control" 
+0

Я не мог согласиться больше, но, как говорится в этом вопросе, у меня нет выбора в этом вопросе, поэтому я должен его обойти. –

+0

Как бы вы разрешили конфликты нормально? Их победа, наша победа? –

+0

Для этого файла? Это не имеет значения. Так или иначе, поскольку содержимое файла будет заменено сборкой в ​​любом случае. Для других файлов, конечно, это имеет значение - но не для этого. –

0

Вы можете поместить файл (имя файла и/или путь) в файл с именем .gitignore Это не позволит git распознавать файл вообще.

1

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

Вам нужно сообщить git, что он должен всегда разрешать конфликты для определенного файла с учетом конкретной стратегии (здесь: theirs win).

git init 

# Define a no-op merge driver for this repo 
git config merge.theirs.driver true 
# The file always-conflict is solved using the just setup 'theirs' driver 
echo always-conflict merge=theirs >> .gitattributes 

# Create two conflicts: 
# - always-conflict is resolved automatically 
# - other-conflict needs to be resolved by you 
echo master-1 > always-conflict 
echo master-1 > other-conflict 
git add --all 
git commit -m master-1 

echo master-2 > always-conflict 
echo master-2 > other-conflict 
git add --all 
git commit -m master-2 

git checkout -b feature HEAD~1 
echo feature > always-conflict 
echo feature > other-conflict 
git add --all 
git commit -m feature 

git rebase master 

# The rebase will stop, but it'll only have you solve other-conflict. 

Если вы не хотите, чтобы файл .gitattributes совершенное управление версиями, используйте .git/info/attributes вместо этого.

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