Концепция отслеживания git и постановки git

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

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

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


person Jeele Yah    schedule 27.09.2011    source источник


Ответы (4)


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

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

person knittl    schedule 27.09.2011
comment
Потрясающее объяснение. - person cheznead; 11.01.2018
comment
Отличное объяснение. - person Mohammad Mehdi Sarfejoo; 13.10.2020

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

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

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

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

person ejoubaud    schedule 04.04.2013

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

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

git add -N
person avh4    schedule 27.09.2011

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

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

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

person Philip Oakley    schedule 27.09.2011