Предотвращение перезаписи файла с помощью Git

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

Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
Принципы ООП в JavaScript
Принципы ООП в JavaScript
Парадигма объектно-ориентированного программирования имеет 4 основных принципа,
Пройдите собеседование по Angular: Общие вопросы и ответы экспертов
Пройдите собеседование по Angular: Общие вопросы и ответы экспертов
Можете ли вы объяснить разницу между ngOnInit и конструктором в Angular?
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
2
0
4 465
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

git rm <file>

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

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

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

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

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

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

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

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

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

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

*.log
*~
conf/*

Доработать по вкусу.

Ответ принят как подходящий

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

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

Другие вопросы по теме