Как мелкий клонировать конкретную фиксацию с глубиной 1?
Возможно ли, чтобы мелкий клонировать конкретную фиксацию в репозитории, то есть с глубиной 1? Что-то вроде
git clone http://myrepo.git 728a4d --depth 1
чтобы получить состояние репозитория, как и при фиксации с помощью SHA 728a4d...
?
Мотивация заключается в том, чтобы избежать клонирования всего репозитория, а затем проверить, что конкретная фиксация, когда нас интересует только состояние репозитория при этом конкретном коммите.
Ответы
Ответ 1
Начиная с Git 2.5.0 (который должен быть доступен как на стороне клиента, так и на стороне сервера) вы можете установить uploadpack.allowReachableSHA1InWant=true
на стороне сервера, чтобы включить выборку определенных SHA1:
git init
git remote add origin <url>
git fetch --depth 1 origin <sha1>
git checkout FETCH_HEAD
Обратите внимание, что я не нашел синтаксиса для этого непосредственно с git clone
.
Ответ 2
Непосредственный ответ: вы не можете.
Зачем? подробное объяснение можно найти здесь: Почему не существует A Git Специфическая функция компиляции клонов?
Что еще вы можете сделать?
Как клонировать репозиторий для определенного коммита? (полный клон)
# Create empty repository to store your content
git clone <url>
git reset <sha-1> --hard
Дополнительная информация:
Как клонировать одну ветвь?
git clone <url> --branch <branch_name> --single-branch <folder_name>
Как клонировать только последнюю фиксацию из данной ветки?
git clone <url> --depth=1 --branch <branch_name> --single-branch <folder_name>
Как пометить клонировать конкретную фиксацию с глубиной 1?
Как прокомментировал @sschuberth: --depth
подразумевает --single-branch
.
Вместо клона используйте команду fetch:
# fetch a commit (or branch or tag) of interest
# In this case you will have the full history of this commit
git fetch origin <sha1>
Ответ 3
Попробуйте использовать while
в bash:
git clone --depth=1 $url
i=1; while ! git show $sha1; do git fetch --depth=$((i+=1)); done
Это довольно медленно, потому что он извлекает каждую фиксацию отдельно; вы можете увеличить инкремент (для получения коммитов в партиях и повышения производительности по сети), но он все еще применяется грубой силой.