Предотвращение перезаписи файла с помощью Git - PullRequest
2 голосов
/ 26 ноября 2008

моя компания недавно начала использовать Git для контроля версий исходного кода, и из-за некомпетентности кодеров - это я и мой начальник :-P - у нас есть действительно хорошие спагетти файлов, перезаписываемых здесь и там.
Есть ли способ пометить определенные файлы как «неприкасаемые», поэтому, если при обновлении ветви с другой стороны либо не перезаписывают файл (ы), либо обновление вообще не выполняется?
Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 27 ноября 2008

С крючками вы можете делать именно то, что просите, но я не знаю, решит ли это вашу настоящую проблему.

Если это так же просто, как то, что ваши файлы обрабатываются, это легко: никогда не тяните / объединяйте / перебазируйте с незафиксированными изменениями. Всегда фиксируйте перед вводом любого другого кода.

3 голосов
/ 26 ноября 2008

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

Итак, я обычно начинаю с чего-то вроде:

*.log
*~
conf/*

Изменить по вкусу.

1 голос
/ 26 ноября 2008

Требуются очень конкретные действия, чтобы заставить Git выбрасывать информацию, и даже тогда она не перезаписывает информацию. Так что ситуация может быть не такой, как вы думаете.

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

Дело в том: Git использует этот рабочий каталог в вашей локальной файловой системе в качестве браузера для базы данных. Это «представление» может измениться, и запись всех ваших транзакций (фиксаций) будет все еще в репо, без изменений .

Таким образом, рабочий каталог, который вы видите, будет меняться в зависимости от того, какое «представление» (извлечение, обычно ветвь) вы вызывали. Даже копии файлов, которые открыты в вашем текстовом редакторе, могут измениться, что меня очень удивило, когда я впервые это заметил.

Вы можете выбросить предыдущую работу, например:
1. git reset HEAD~2 который выбрасывает вас за последние два коммита или
2. checkout -f, который отбрасывает незафиксированные изменения в вашем рабочем каталоге (безвозвратно, если они не были git add ed) перед переходом на другую ветку ('view')
но вы не можете случайно перезаписать информацию, не получив хотя бы предупреждающего сообщения. В большинстве случаев информация все еще находится в репо, пока не будет собрана сборщиком мусора, обычно после более чем 30 дней.

Как сказал Грег, нам нужно больше информации, чтобы знать наверняка.

1 голос
/ 26 ноября 2008

В общем, Git старается избегать перезаписи измененных файлов при использовании извлечения для перехода от ветви к ветви. То есть, если файл не был изменен и Git должен изменить его, файл изменится (предыдущее содержимое файла все еще существует в предыдущей ветке). Если файл был изменен и Git не нуждается в его изменении, содержимое файла будет сохранено. Если файл был изменен, и Git хочет изменить его, вы будете уведомлены о том, что локальные изменения вступают в конфликт с изменением ветви, и Git откажется переключать ветви.

Чтобы понять, почему ваши файлы были неожиданно перезаписаны, нам, вероятно, потребуется больше информации о том, что вы сделали.

0 голосов
/ 26 ноября 2008

Похоже, вы хотите, чтобы git не отслеживал «неприкасаемые» файлы. Это делается с помощью команды git rm .

git rm <file>

Если это то, что вам нужно, используйте переключатель --dry-run для предварительного просмотра того, что произойдет. Если вы уверены, что хотите удалить файлы, вы можете использовать параметр --cached, чтобы локальные файлы не удалялись.

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

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