Ответ 1
К сожалению, не существует способа сделать git fetch
только с определенным кодом фиксации. Если есть, я действительно хотел бы знать. Однако я рассмотрел вашу проблему двумя разными способами: один, если это возможно, создать тег или ветку в удаленном репозитории, который указывает на коммит, который я хочу, скажем, мы называем его "ref". Таким образом, я могу получить удаленный реф, и к нему применим --depth
, а не последний совет. Вместо git submodule update --init
я делаю:
git submodule init
git clone --depth 1 -b ref --separate-git-dir .git/modules/sub/ repository sub
где "sub" - это имя и путь подмодуля (для простоты пусть говорят, что они одинаковы)
Другой способ, если вы не можете создавать теги или ветки в удаленном репозитории, - это поиск требуемого коммита в цикле:
git submodule init
id=$(git submodule status|sed -ne 's/.\([a-z0-9]*\) sub.*/\1/p'
git clone --depth 1 --separate-git-dir -n .git/modules/sub/ repository sub
cd sub
while ! git rev-list $id ; do
git fetch --depth $((i+=1))
done
git checkout $id
Вы можете увеличивать с помощью более чем одной фиксации за раз, чтобы сделать ее быстрее, но вы можете столкнуться с некоторыми более ранними фиксациями, чем тот, который вы хотите.