GIT и пуш с игнорируемыми файлами
Какова точная процедура, которой вы должны следовать, используя git? Я дам свою процедуру (которая, так или иначе, работает не очень гладко):
- cloned a repository: (works fine)
- added settings files to .gitignore to prevent overwriting the originial
settingfiles on the remote (= test environment)
- made changes to my local repository and committed it locally (works fine)
- pushed it from local to remote (did not work properly)
При нажатии на удаленный файл файлы настроек на удаленном устройстве удаляются, что привело к смерти моей тестовой среды. Я просто хочу, чтобы файлы настроек игнорировались, если я нажимаю, а не удаляю.
Что я сделал не так / забыл? Есть идеи?
3 ответа
Насколько я понимаю, файл настроек уже отслеживался в git repo, который вы клонировали. это означает, что даже если вы добавите его в .gitignore
, он все еще будет отслеживаться.
чтобы удалить файл из истории, и убедитесь, что он игнорируется в будущем, вы должны
- добавить его в
.gitignore
(как вы уже сделали) - бежать
git filter-branch --index-filter 'git rm --cached --ignore-unmatch settingsfile' HEAD
обратите внимание, что вам нужно запустить приведенную выше команду для каждой из ветвей, где присутствует файл.
тогда вам нужно git push -f origin master
(если master
это название филиала, и origin
название пульта)
Вы можете обратиться к этому руководству за дополнительной информацией.
Кроме того, как сказал Рафид К. Абдулла, вы ничего не удалили (если вы следовали рабочему процессу, который вы описали в своем посте); Вы только что добавили модификации, которые вы можете легко отменить. это то, для чего все-таки мерзавец:)
Я понимаю, что файл настроек, о котором вы говорите, это ваши настройки, а не папка.git. Если я правильно понял, то это не всегда помогает добавить их в.gitignore, потому что все, что делает.gitignore, это то, что он не проверяет эти файлы локально, когда вы используете 'git commit -a', 'git diff' и т. д., но если они уже есть в вашем локальном хранилище, они все равно будут отправлены на удаленный сервер.
Сказав это, я не думаю, что вы потеряли файл настроек на удаленном сервере, потому что все, что вы сделали, это добавили больше коммитов, поэтому вы должны найти файл настроек в истории.
В любом случае, к сожалению, в отличие от SVN, если вы просто научитесь использовать GIT за несколько шагов, вы всегда будете делать ошибки. Вначале я совершил МНОГИЕ ошибки, а потом признался, что должен прочитать об этом книгу. Но сначала я хотел понять его концепцию, потому что именно это иногда создает проблемы (например, в чем разница между "master master" и "origin/master" и т. Д.), Поэтому я нашел эту очень полезную страницу и рекомендую вам прочитайте это:
http://www.eecs.harvard.edu/~cduan/technical/git/
И я также нашел эту очень интересную книгу:
Вам не нужно читать все это, просто прочитайте основы и, самое главное, ветвление.
Надеюсь, это поможет.
Не добавлять файл настроек в .gitignore
сохраните изменения в файле настроек git stash
делай push & pull как обычно. Когда закончите, восстановите файл настроек с помощью git stash apply
,