Концепция git-трекинга и git-постановки - PullRequest
21 голосов
/ 27 сентября 2011

Когда вы изменяете файл в вашем рабочем каталоге, git говорит вам использовать «git add» для stage.

Когда вы добавляете новый файл в ваш рабочий каталог, git говорит вам использовать «git add» для начала отслеживания.

Я немного озадачен этими двумя понятиями, потому что я предполагал, что отслеживание файла на наличие изменений отличается от постановки его на фиксацию

Ответы [ 4 ]

26 голосов
/ 04 апреля 2013

Git, по сути, имеет 4 основных статуса для файлов в вашем локальном репо:

  • без отслеживания: Файл новый, Git ничего не знает об этом.Если вы git add <file>, он становится:
  • staged: Теперь Git знает файл (отслеживается), но также делает его частью следующего пакета коммита (называемого индексом )1012 *).Если вы git commit, он становится:
  • без изменений: Файл не изменился с момента его последней фиксации.Если вы измените его , оно станет:
  • unstaged: Изменено, но еще не является частью следующего коммита.Вы можете поставить его снова с git add

Как видите, git add будет отслеживать неотслеживаемых файлов и stage любого файла.

Кроме того: вы можете открепить незафиксированный файл с помощью git rm --cached filename и удалить из архива с помощью git reset HEAD <file>

14 голосов
/ 27 сентября 2011

Git имеет концепцию, известную как «индекс». Чтобы создать новый коммит, вы заполняете индекс содержимым, которое вы хотели бы иметь в следующем коммите. Это означает, что вы должны явно указать Git, какие изменения вы хотите внести в следующий коммит, используя git add. (git add -p для добавления только одиночных блоков)

Для Git не имеет значения, обновляете ли вы только файл («этап изменения») или добавляете полное содержимое нового файла («начать отслеживание файла») - оба раза, все это в Git индекс видит добавление новых изменений

8 голосов
/ 27 сентября 2011

Когда вы добавляете файл для начала отслеживания, он также размещает его содержимое.

Если вы хотите добавить файл для отслеживания без его постановки, вы можете использовать

git add -N
1 голос
/ 27 сентября 2011

Оба шага git add, которые вы идентифицируете, по сути, делают одно и то же, они просто имеют разные объяснения из-за своего маршрута прибытия.

git add просто сообщает git, что предоставленный файл - это файл, который вы хотите иметь в его точной текущей форме (его содержимом) в репозитории контроля версий. В этот момент git сделает снимок файла (и сохранит примечание в своем индексе), чтобы он был готов к тому моменту, когда все ваши изменения в ваших файлах будут готовы и добавлены (т.е. собраны вместе в области подготовки), для ваш git commit (с соответствующим сообщением; -).

Как только git будет уведомлен об этом файле (например, опция @ avh's -N), он заметит (отследит) изменения в файле под видом различных команд (таких как git status). Таким образом, позже вы должны явно указать git, когда вы больше не хотите, чтобы файл отслеживался (git rm <file>), и вы можете продолжить редактирование файла (локально) после того, как вы add отредактировали версию, которая будет в совершить. Почти очевидно (или, возможно, нет), вы можете git add файл много раз, прежде чем принять окончательную версию.

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