Подтвердить что ты не робот

Как мелкий клонировать конкретную фиксацию с глубиной 1?

Возможно ли, чтобы мелкий клонировать конкретную фиксацию в репозитории, то есть с глубиной 1? Что-то вроде

git clone http://myrepo.git 728a4d --depth 1

чтобы получить состояние репозитория, как и при фиксации с помощью SHA 728a4d...?

Мотивация заключается в том, чтобы избежать клонирования всего репозитория, а затем проверить, что конкретная фиксация, когда нас интересует только состояние репозитория при этом конкретном коммите.

4b9b3361

Ответ 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

Это довольно медленно, потому что он извлекает каждую фиксацию отдельно; вы можете увеличить инкремент (для получения коммитов в партиях и повышения производительности по сети), но он все еще применяется грубой силой.