Для файлов, которые вы не хотите помещать в систему контроля версий, используйте файл .gitignore
. Поскольку файлы уже находятся в репо, вам нужно будет предпринять шаги для их удаления - по крайней мере, добавив коммиты в каждую ветку для их удаления (см. git rm --cached
), или, возможно, отредактировав историю (например, с git filter-branch
).
Вы можете искать здесь для каждой из этих тем и найти много ответов, объясняющих их. Также вы можете ссылаться на git docs, например
Для файлов, где вы хотите иметь возможность получать изменения с удаленного компьютера, но также не хотите, чтобы вас блокировали от смены веток ... это невозможно сделать каким-либо удаленно безопасным способом. Либо файл находится под контролем источника, изменения являются общими, и применяются все правила управления незафиксированными изменениями; или он не находится под контролем источника и управляется независимо в каждом клоне.
В простейшем случае у вас будет 3 разных типа файлов: файлы, которые генерируются процессом сборки, которые вы никогда не редактируете и которые не хранятся в исходном контроле; файлы из сторонних источников, таких как зависимости, которые вы также не редактируете или не помещаете в систему контроля версий, но которые извлекаются программным обеспечением для управления зависимостями во время сборки; и файлы, которые вы редактируете, которые никогда не изменяются автоматическими и являются единственными в управлении исходным кодом, поэтому вы всегда хотите поделиться изменениями в этих файлах, и никогда не будет автоматического изменения, которое блокировало бы вас от переключения или переключения ветвей.
Если ваш процесс требует, чтобы у вас были файлы, которые не соответствуют этим категориям, то в первую очередь я бы пересмотрел ваш процесс - потому что проблемы с контролем версий - это только первые (и самые незначительные) проблемы, возникающие из-за наличия единственного файл, который принимает изменения от 2 или более из этих категорий.
Если вам необходимо, чтобы в процессе сборки были изменены файлы, созданные либо локально и контролируемые источником, либо файлы сторонних производителей, извлеченные с зависимостью, тогда процесс сборки должен скопировать файл и работать с этой копией. Измененная копия должна быть .gitignore
d, а оригинал должен быть оставлен в процессе сборки.
Если у вас должны быть файлы, которые смешивают изменения, созданные локально, с файлами сторонних разработчиков, то вам следует настроить репо для «вашей версии» зависимости, которая представляет такие файлы (форк, если они также используют git для контроль источника), с веткой поставщика, чтобы вы могли включать будущие изменения, которые они вносят в свои файлы, если вам нужно. Опять же, это тема, по которой вы можете искать и найти много существующих ответов.