В чем разница между измененным и измененным статусом файла, возвращаемым IndexDiff?
Я нашел только то, что:
// в репо, в индексе, контент diff => изменен // в индексе, в рабочем каталоге, контент отличается => изменен
Но я не могу понять разницу?
3 ответа
Посмотрите на javadoc для получателей в классе IndexDiff:
/**
* @return list of files changed from tree to index
*/
public Set<String> getChanged()
это файлы, которые различаются между точками дерева HEAD (в большинстве случаев это кончик вашей текущей ветви) и индексом Git.
/**
* @return list of files modified on disk relative to the index
*/
public Set<String> getModified()
это файлы, которые различаются между файлами на диске (или рабочим деревом) и индексом Git
В командном javadoc нет особой проработки. Я использовал юнит-тесты git status, чтобы понять, как на самом деле работает git status.
короче:
модифицированный - что вы получите, если вы измените существующий файл, не добавляя его в индекс
изменилось - что вы получите, если вы измените существующий файл и назовете его "git add..."
Так как вы не получили никакого ответа, я даю вам начало.
Во-первых, я думаю, что есть разница между:
рабочий каталог: это файловая система, над которой вы работаете. Когда вы изменяете файл, он изменяется в файловой системе. Обычно, это работа ОС, чтобы поддерживать ее в актуальном состоянии.
индекс: что Git использует, чтобы знать, что происходит. Это внутренний механизм Git для отслеживания того, что происходит. Хотя это немного нечетко для меня, он должен либо знать об изменениях в файловой системе, либо о добавленных вами изменениях (с помощью git add [-u]), либо о внесенных вами изменениях (или всех их)
хранилище / локальная копия: разные места, где у вас могут быть разные версии файлов. Git использует хеши для хранения информации о них (но вы должны знать об этом, если задаете этот вопрос)
Я знаю, что проблема Git заключается в том, чтобы иметь дело с размером репо, он становится медленным, когда размер репо довольно велик. Точнее, их команда работает над уменьшением количества вызовов lstat, чтобы обновить знания Git о вашей файловой системе (так что это означает, что Git обычно знает, когда вы изменяете файл в вашем рабочем каталоге)
Я не знаю, на что вы смотрите, но вы можете искать git-update-index (я думаю, он вызывается, когда вы делаете git add), 'Git lstat' или подобные вещи в Google.
И, извините за это, но ваш вопрос действительно неясен: слишком много сокращений и слишком мало строк. Означает ли 'content diff', что вы выполнили команду diff для вашего контента, или этот контент отличается? Ваши символы не ясны, зачем использовать // когда вы, вероятно, перечисляете элементы, а = = представляют следствие или что-то еще. Люди ищут время, чтобы найти документ, прежде чем ответить, пожалуйста, найдите время, чтобы написать четкие вопросы.
Я надеюсь, что это поможет вам
Винсент