Каково обоснование решения git не фиксировать текущее содержимое нового добавленного файла, а содержимое того, когда он был добавлен? - PullRequest
3 голосов
/ 08 апреля 2011

Итак, из того, что я прочитал в Pro Git,

Оказывается, Git создает файл точно так же, как когда вы запускаете add команда. Если вы делаете Теперь версия someFile как было когда вы в последний раз запускали add команда, как это войдет в commit, а не версия файла как это выглядит в вашем рабочем каталоге когда вы запускаете commit. Если вы изменяете файл после запуска add, ты должен бежать add снова для постановки последняя версия файла

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

Что за этим стоит?

Ответы [ 3 ]

4 голосов
/ 08 апреля 2011

git не отслеживает файлы, он отслеживает изменения. Поэтому, когда вы «добавляете файл», вы не добавляете файл , вы добавляете изменения к этому файлу, который в случае нового файла - все его содержание в момент, когда вы добавили его. Поэтому, если вы вносите изменения после «добавления файла», но перед фиксацией, вам также необходимо добавить эти новые изменения, иначе они не будут зафиксированы.

2 голосов
/ 08 апреля 2011

Почти всегда имеет смысл фиксировать сразу после добавления, поэтому commit имеет опцию -a и почему практически каждая другая VCS не позволяет вам разделить добавление и фиксацию, даже если они отдельные этапы внутри.

Есть некоторые обстоятельства, когда это очень удобно делать отдельно. Некоторые люди используют промежуточную область как временный коммит, если они не уверены, хотят ли они сохранить изменения или нет, и все еще экспериментируют. Я предпочитаю, чтобы все мои коммиты были компилируемыми, поэтому иногда я делаю add, когда я готов к фиксации, но у меня есть куча ошибок компиляции. Это позволяет мне diff изменить то, что я изменил, исправляя ошибки компиляции на случай, если я что-нибудь испорчу. Это также очень удобно, если вы хотите разделить изменения на несколько коммитов по любой причине.

0 голосов
/ 08 апреля 2011

Это на самом деле очень согласуется с тем, как git add работает для не новых файлов.

$ git checkout master # assume there is some file called code.c
# hack hack hack
$ git add code.c
# hack hack hack
$ git commit

Это добавляет файл , как он выглядел в то время, когда вы делали git add ,Например, в SVN вы даже не добавите, потому что svn add только для новых файлов.Так что это еще один дополнительный шаг (если вы не используете git commit -a, как сказал кто-то другой), но он дает вам гораздо большую гибкость, чтобы фиксировать только некоторые изменения и оставлять другие незафиксированными в одном и том же файле.Как только вы освоитесь с git, вы можете полюбить команду git add -p именно по этой причине.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...