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/

И я также нашел эту очень интересную книгу:

http://progit.org/book/

Вам не нужно читать все это, просто прочитайте основы и, самое главное, ветвление.

Надеюсь, это поможет.

Не добавлять файл настроек в .gitignore сохраните изменения в файле настроек git stash делай push & pull как обычно. Когда закончите, восстановите файл настроек с помощью git stash apply,

Другие вопросы по тегам