Git: не затрагивайте сгенерированные системой / измененные файлы в моих коммит

#git

#git

Вопрос:

Я работаю над проектом C # dot net, где недавно был представлен git.

При сборке будет сгенерировано много DLL-файлов и изменено много отслеживаемых js-файлов.

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

  1. Это должно позволить мне переключить ветку, сохранив эти файлы как есть.
  2. При извлечении новых изменений, если какие-либо изменения должны быть применены к этим js-файлам удаленно, они должны быть применены, но все же это должно позволить мне переключать ветку и извлекать новые изменения.
  3. Я должен иметь возможность легко фиксировать другие файлы, которые я изменил

Пожалуйста, предложите шаги для этого в командах git.

(Я сделал эти сгенерированные и измененные системой файлы неотслеживаемыми, но при внесении новых изменений это не происходит, потому что есть изменения, которые должны быть применены к файлам, которые я сделал неотслеживаемыми)

Комментарии:

1. Похоже, вам нужно игнорировать файлы сборки. Хорошее место для начала — игнорировать все, что находится в папке bin и obj.

2. пробовал .gitignore ?

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

Ответ №1:

Для файлов, которые вы не хотите помещать в систему управления версиями, используйте .gitignore файл. Поскольку файлы уже находятся в репозитории, вам нужно будет предпринять шаги для их удаления — по крайней мере, добавив коммиты в каждую ветку для их удаления (см. git rm --cached ) или, возможно, отредактировав историю (например, с помощью git filter-branch ).

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

Для файлов, в которых вы хотите иметь возможность получать изменения с удаленного устройства, но также не хотите, чтобы вам блокировали изменение ветвей… это невозможно сделать каким-либо удаленно безопасным способом. Либо файл находится под управлением исходного кода, изменения являются общими и применяются все правила управления незафиксированными изменениями; либо он не находится под управлением исходного кода и управляется независимо в каждом клоне.

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

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

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

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