Как клонировать git-репозиторий с определенной ревизией / набором изменений? - PullRequest
343 голосов
/ 16 августа 2010

Как я могу клонировать git-репозиторий с определенной ревизией, как обычно в Mercurial:

hg clone -r 3 /path/to/repository

Ответы [ 14 ]

2 голосов
/ 07 января 2016

Использование 2 из приведенных выше ответов ( Как клонировать git-репозиторий с определенной ревизией / changeset? и Как клонировать git-репозиторий с конкретной ревизией / changeset? ) Помог мне прийтис определителем.Если вы хотите клонировать до некоторой точки, то эта точка должна быть тегом / ветвью, а не просто SHA или FETCH_HEAD запутывается.Следуя набору git fetch, если вы используете имя ветви или тега, вы получите ответ, а если вы просто используете SHA-1, вы получите не ответ.
Вот что я сделал: - создаю полный рабочий клон полногорепо из фактического источника

cd <path to create repo>
git clone git@<our gitlab server>:ui-developers/ui.git 

Затем создайте локальную ветвь в интересной точке

git checkout 2050c8829c67f04b0db81e6247bb589c950afb14
git checkout -b origin_point

Затем создайте мое новое пустое репо с моей локальной копией в качестве источника

cd <path to create repo>
mkdir reduced-repo
cd reduced-repo
git init
git remote add local_copy <path to create repo>/ui
git fetch local_copy origin_point

В этот момент я получил этот ответ.Я отмечаю это, потому что если вы используете SHA-1 вместо ветки выше, ничего не происходит, поэтому ответ означает, что он работал

/var/www/html/ui-hacking$ git fetch local_copy origin_point
remote: Counting objects: 45493, done.
remote: Compressing objects: 100% (15928/15928), done.
remote: Total 45493 (delta 27508), reused 45387 (delta 27463)
Receiving objects: 100% (45493/45493), 53.64 MiB | 50.59 MiB/s, done.
Resolving deltas: 100% (27508/27508), done.
From /var/www/html/ui
 * branch            origin_point -> FETCH_HEAD
 * [new branch]      origin_point -> origin/origin_point

Теперь в моем случае мне нужно было вернуть это обратно наgitlab, как свежее репо, так что я сделал

git remote add origin git@<our gitlab server>:ui-developers/new-ui.git

Это означало, что я мог перестроить свое репо с origin_point, используя git --git-dir=../ui/.git format-patch -k -1 --stdout <sha1> | git am -3 -k, чтобы выбрать вишню удаленно, затем использовать git push origin, чтобы загрузить весь лот обратно в егоновый дом.

Надеюсь, что кому-то поможет

0 голосов
/ 27 июня 2019

Я использую этот фрагмент с GNU make, чтобы закрыть любой тег ревизии, ветвь или хеш

0 голосов
/ 20 октября 2017

Это просто.Вам просто нужно установить восходящий поток для текущей ветви

$ git clone repo
$ git checkout -b newbranch
$ git branch --set-upstream-to=origin/branch newbranch
$ git pull

Вот и все

0 голосов
/ 06 июня 2015
git clone -o <sha1-of-the-commit> <repository-url> <local-dir-name>

git использует слово origin вместо общеизвестного revision

Ниже приведен фрагмент руководства $ git help clone

--origin <name>, -o <name>
    Instead of using the remote name origin to keep track of the upstream repository, use <name>.
...