Подтвердить что ты не робот

Git - Можно ли исключить файл из `git push`, но сохранить их в локальном репозитории?

В моем домашнем каталоге у меня есть файлы в локальном репозитории git, потому что я хочу отслеживать их все под контролем версий.

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

Как я могу достичь этого с помощью git? Могу ли я настроить файл ".gitignore-for-push"? Я не могу использовать локальный файл .gitignore, потому что он полностью исключает эти файлы из-за отслеживания.

ps: Я знаю вопрос Есть ли исключаемый файл эквивалент..., но ответ идет по пути .gitignore, который я не могу использовать. Другой вопрос Исключить определенные файлы при нажатии... отвечает только на конкретный случай для git + heroku, а не git.

4b9b3361

Ответ 1

Это невозможно. Если вы сделали файл, он будет нажат. Действие push действует только на фиксации, а не на файловой основе.

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

Ответ 2

Вы можете продолжать и фактически отслеживать эти файлы (без конфиденциальной информации), но затем используйте:

git update-index --assume-unchanged <file>

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

Чтобы снова обновить информацию Git, вы должны использовать:

git update-index --no-assume-unchanged <file>

Ответ 3

В конце концов я столкнулся с проблемой: поместите конфиденциальную информацию в подкаталог с собственным репозиторием git и соберите файл обратно в прежнее место.

например. в вашей домашней папке (~) живет файл .creds, который вы не хотите в публичном репозитории. Переместите этот файл в подпапку, называемую protected, и создайте символическую ссылку от ~ до protected/.creds.. Конечно, не включайте эту папку в репозиторий ~, но создайте новый репозиторий в папке protected просто отслеживать .creds. Если вы вообще не размещаете этот репозиторий, вы настроены.

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

Ответ 4

Здесь git -update-index - записывать содержимое файла в рабочем дереве в индекс.

git update-index --assume-unchanged <PATH_OF_THE_FILE>

Пример: -

git update-index --assume-unchanged somelocation/pom.xml

для более подробной информации.

Ответ 5

Просто не делайте файлы, которые вы хотите исключить.

Например, если у вас есть два файла a и b, которые находятся в локальном репо, но вы только хотите зафиксировать один из них, используйте: git add a, чтобы добавить один из файлов. Затем зафиксируйте с помощью git commit (не включайте флаг -a)