#git
#git
Вопрос:
Я работаю над проектом C # dot net, где недавно был представлен git.
При сборке будет сгенерировано много DLL-файлов и изменено много отслеживаемых js-файлов.
Эти файлы в любом случае мне не нужно фиксировать и нажимать. Но эти файлы мешают мне извлекать последние версии из ветки, переключаться на другую ветку и т.д. Я хотел бы получить простое решение этой проблемы, чтобы
- Это должно позволить мне переключить ветку, сохранив эти файлы как есть.
- При извлечении новых изменений, если какие-либо изменения должны быть применены к этим js-файлам удаленно, они должны быть применены, но все же это должно позволить мне переключать ветку и извлекать новые изменения.
- Я должен иметь возможность легко фиксировать другие файлы, которые я изменил
Пожалуйста, предложите шаги для этого в командах git.
(Я сделал эти сгенерированные и измененные системой файлы неотслеживаемыми, но при внесении новых изменений это не происходит, потому что есть изменения, которые должны быть применены к файлам, которые я сделал неотслеживаемыми)
Комментарии:
1. Похоже, вам нужно игнорировать файлы сборки. Хорошее место для начала — игнорировать все, что находится в папке bin и obj.
2. пробовал
.gitignore
?3. На самом деле, мне кажется, что некоторые из этих файлов уже являются частью вашего репозитория, и в этом случае простое добавление их в
.gitignore
не будет иметь никакого эффекта. Во-первых, вам, возможно, придетсяgit rm --cached
использовать эти файлы. Но вам следует подумать, почему эти файлы были версионными в первую очередь, прежде чем удалять их.
Ответ №1:
Для файлов, которые вы не хотите помещать в систему управления версиями, используйте .gitignore
файл. Поскольку файлы уже находятся в репозитории, вам нужно будет предпринять шаги для их удаления — по крайней мере, добавив коммиты в каждую ветку для их удаления (см. git rm --cached
) или, возможно, отредактировав историю (например, с помощью git filter-branch
).
Вы можете выполнить поиск здесь по каждой из этих тем и найти множество ответов, объясняющих их. Также вы можете обратиться к документам git, таким как
- https://git-scm.com/docs/gitignore для
.gitignore
- https://git-scm.com/docs/git-rm для
git rm --cached
- https://git-scm.com/docs/git-filter-branch для
git filter-branch
Для файлов, в которых вы хотите иметь возможность получать изменения с удаленного устройства, но также не хотите, чтобы вам блокировали изменение ветвей… это невозможно сделать каким-либо удаленно безопасным способом. Либо файл находится под управлением исходного кода, изменения являются общими и применяются все правила управления незафиксированными изменениями; либо он не находится под управлением исходного кода и управляется независимо в каждом клоне.
В простейшем случае у вас будет 3 разных типа файлов: файлы, которые генерируются в процессе сборки, которые вы никогда не редактируете и которые не хранятся в системе управления версиями; файлы из сторонних источников, таких как зависимости, которые вы также не редактируете и не помещаете в систему управления версиями, но которые извлекаются программным обеспечением для управления зависимостями во время сборки; и файлы, которые вы редактируете, которые никогда не изменяются автоматическими средствами и являются единственной вещью в системе управления версиями, поэтому вы всегда хотите поделиться изменениями в этих файлах, и есть никогда не выполняйте автоматическое изменение, которое заблокировало бы вас от переключения на вытягивание или ответвление.
Если ваш процесс требует, чтобы у вас были файлы, которые не соответствуют этим категориям, то первое, что я бы сделал, это проверил ваш процесс, потому что проблемы с управлением версиями — это только первые (и самые легкие) проблемы, возникающие из-за наличия одного файла, который принимает изменения из 2 или более из этих категорий.
Если вам необходимо, чтобы процесс сборки изменял файлы, которые либо создаются локально и контролируются исходным кодом, либо являются файлами сторонних производителей, подключенными с зависимостью, тогда процесс сборки должен скопировать файл и работать с копией. Измененная копия должна быть .gitignore
удалена, а оригинал должен быть оставлен в покое в процессе сборки.
Если у вас должны быть файлы, которые смешивают изменения, внесенные локально, с файлами сторонних производителей, тогда вам следует настроить репозиторий для «вашей версии» зависимости, которая вводит такие файлы (форк, если они также используют git для управления версиями), с веткой поставщика, чтобы вы могли включать будущие изменения, которые они вносят в свои файлы, если вам нужно. Опять же, это тема, по которой вы можете выполнить поиск и найти множество существующих ответов.