Git - Можно ли исключить файл из `git push`, но сохранить их в локальном репозитории?
В моем домашнем каталоге у меня есть файлы в локальном репозитории git, потому что я хочу отслеживать их все под контролем версий.
Большинство из этих файлов я хочу нажать в удаленный репозиторий, но некоторые из них я хочу сохранить только в своем локальном репозитории (они содержат слегка конфиденциальную информацию).
Как я могу достичь этого с помощью git? Могу ли я настроить файл ".gitignore-for-push
"? Я не могу использовать локальный файл .gitignore
, потому что он полностью исключает эти файлы из-за отслеживания.
ps: Я знаю вопрос Есть ли исключаемый файл эквивалент..., но ответ идет по пути .gitignore
, который я не могу использовать. Другой вопрос Исключить определенные файлы при нажатии... отвечает только на конкретный случай для git + heroku, а не git.
Ответы
Ответ 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
)