@StephenJennings: это лучший способ узнать, какие файлы находятся под контролем версий, чем мысленно делать « ls -Rминус .gitignore». Полезность в целом: можно более или менее знать, что происходит, но самоанализ хранилища дает уверенность, которую он знает. Такая уверенность особенно важна для начинающих пользователей и позволяет понять, насколько приятна программа. Git не делает заверение своих пользователей приоритетом, поэтому многие люди ненавидят его до тех пор, пока не узнают.
Я абсолютно ужасен в сценариях оболочки, так что это, безусловно, неоптимально, но такого рода вещи могут сделать это для вас, если вы используете bash. Надеюсь, кто-нибудь еще может прийти и почистить его или заменить на что-нибудь получше. Я только протестировал его на своем Mac, так что будьте осторожны.
Он должен печатать все файлы в коммитах, которые являются предками текущего HEAD. Сохраните его в файле, который называется manifest.shгде-то на вашем пути:
#!/bin/bash
TFILE=$(mktemp -t git-manifest)
for sha in $(git log --pretty=format:%H)
do
git ls-tree --name-only --full-tree -r $sha >> $TFILE
done
sort -u $TFILE
rm $TFILE
Нет необходимости, exportпоскольку он не должен быть доступен в дочерних процессах. Если цикл находится над хэшем SHA, цикл работает просто отлично, иначе readлучше использовать переменную и заключить ее в кавычки. sortесть -uопция, которая делает то, что uniqделает. Файл не получит rmd, когда вы отмените на полпути, вам понадобится trapдля этого, но это, вероятно, будет чрезмерным для этого сценария.
Даниэль Бек
@DanielBeck: Спасибо, я немного его обновил. mktempне существует в Git Bash, я должен найти способ справиться с этим, чтобы Windows тоже могла играть.
git ls-files
?ls -R
минус.gitignore
». Полезность в целом: можно более или менее знать, что происходит, но самоанализ хранилища дает уверенность, которую он знает. Такая уверенность особенно важна для начинающих пользователей и позволяет понять, насколько приятна программа. Git не делает заверение своих пользователей приоритетом, поэтому многие люди ненавидят его до тех пор, пока не узнают.Ответы:
Я абсолютно ужасен в сценариях оболочки, так что это, безусловно, неоптимально, но такого рода вещи могут сделать это для вас, если вы используете bash. Надеюсь, кто-нибудь еще может прийти и почистить его или заменить на что-нибудь получше. Я только протестировал его на своем Mac, так что будьте осторожны.
Он должен печатать все файлы в коммитах, которые являются предками текущего HEAD. Сохраните его в файле, который называется
manifest.sh
где-то на вашем пути:источник
export
поскольку он не должен быть доступен в дочерних процессах. Если цикл находится над хэшем SHA, цикл работает просто отлично, иначеread
лучше использовать переменную и заключить ее в кавычки.sort
есть-u
опция, которая делает то, чтоuniq
делает. Файл не получитrm
d, когда вы отмените на полпути, вам понадобитсяtrap
для этого, но это, вероятно, будет чрезмерным для этого сценария.mktemp
не существует в Git Bash, я должен найти способ справиться с этим, чтобы Windows тоже могла играть.