Есть ли способ перечислить все файлы, отслеживаемые удаленными репозиториями? - PullRequest
0 голосов
/ 05 августа 2020

Я знаю, что могу перечислить файлы, отслеживаемые определенной веткой, используя git ls-tree -r <branch> --name-only, и это дает мне именно то, что я искал. Однако, когда я пытаюсь сделать это с помощью удаленной ветки, я получаю сообщение об ошибке: sh: origin/master: No such file or directory. Так есть ли способ получить список файлов в удаленной ветке, не извлекая эту ветку?

1 Ответ

2 голосов
/ 05 августа 2020

Прежде всего стоит упомянуть, что это не набор файлов , отслеживаемых веткой или , отслеживаемых (Git) репозиторием , поскольку эти фразы не очень хорошо определено. Результатом git ls-files -r при фиксации является набор файлов в этой фиксации .

Слово отслеживается в Git довольно перегружено, но когда мы поговорим о отслеживаемом файле по сравнению с неотслеживаемым файлом в Git, мы имеем в виду файл, который сейчас или не находится в индексе .

Набор файлов, который будет в индексе Git, если вы используете git checkout или git switch для извлечения некоторой конкретной фиксации, обычно составляет 1 набор файлов в этом коммите. В этом смысле вы можете называть эти файлы «отслеживаемыми», но если вы это сделаете, вы запутаетесь. Отслеживаемые файлы - это те, которые сейчас находятся в индексе Git . Вы можете изменить , который установлен в любое время:

git add F

скопирует копию рабочего дерева файла F в индекс Git. 2 Если раньше его там не было - его не отслеживали - что ж, теперь оно есть, так что теперь оно отслеживается. Или:

git rm --cached F

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

Каждый раз, когда вы делаете новую фиксацию, Git делает эту новую фиксацию используя файлы, находящиеся в индексе в то время. Даже команды git commit -a, git commit --include <em>files</em> и git commit --only <em>files</em> работают с индексом, хотя они используют дополнительные временные файлы индекса, чтобы упростить откат обновлений в случае сбоев. (Это делает описание их точного действия, особенно при наличии Git хуков, особенно сложным.)

Между тем, вы можете проверить любой коммит, который у вас есть, используя git ls-files -r; вам просто нужно использовать имя, которое Git может превратить в правильный коммит ha sh ID. Как вы отметили в комментарии , вы использовали два имени вместо одного.

1 Слово обычно находится здесь, потому что вы можете использовать различные трюки с индексом Git или использовать альтернативный индекс, установив переменную среды GIT_INDEX_FILE. Кроме того, Git иногда позволяет переносить изменения индекса и / или рабочего дерева через операции фиксации и / или переключения ветвей. Подробнее см. Оформить заказ в другой ветке при наличии незафиксированных изменений в текущей ветке .

2 Если вы установили --assume-unchanged или --skip-worktree биты в файле, который в настоящее время находится в индексе, git add не обновляет индекс из рабочего дерева. Вы также можете использовать GIT_INDEX_FILE, как в сноске 1.

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