リポジトリ内の特定のコミット、つまり深さ1の浅いクローンを作成することは可能ですか?何かのようなもの
git clone http://myrepo.git 728a4d --depth 1
SHA 728a4d...
?]でコミット時のリポジトリの状態を取得するには
その理由は、特定のコミットでのリポジトリの状態にのみ関心がある場合、リポジトリ全体を複製する必要を回避し、その特定のコミットをチェックアウトすることです。
Git 2.5.0以降(bothクライアントとサーバー側で利用可能にする必要があります)サーバー側でuploadpack.allowReachableSHA1InWant=true
を設定して特定のSHA1のフェッチを有効にできます:
git init
git remote add Origin <url>
git fetch --depth 1 Origin <sha1>
git checkout FETCH_HEAD
git clone
で直接これを行うための構文が見つからなかったことに注意してください。
注:私の例では、コミットハッシュを使用してクローンを作成することはできませんが、タグのクローンを作成して軽量のリポジトリを作成することはできます。
「クローン」にコミットを1つだけ持つ必要があり、コミットハッシュを使用する場合、短い答えは[〜#〜 ] no [〜#〜]。
このコマンドの構成(v2.13.2.windows.1でテスト済み)をタグに使用します。
git clone --depth 1 [email protected]:VENDOR/REPO.git --branch 1.23.0 --single-branch
1.23.0
-コミットハッシュまたはブランチのいずれかです。
完全な例:
$ git clone --depth 1 [email protected]:Seldaek/monolog.git --branch 1.23.0 --single-branch
Cloning into 'monolog'...
remote: Counting objects: 201, done.
remote: Compressing objects: 100% (188/188), done.
remote: Total 201 (delta 42), reused 32 (delta 5), pack-reused 0
Receiving objects: 100% (201/201), 190.30 KiB | 0 bytes/s, done.
Resolving deltas: 100% (42/42), done.
Note: checking out 'fd8c787753b3a2ad11bc60c063cff1358a32a3b4'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
$ cd monolog
.git
dirサイズ(267Kvs2.6Mフルclone
)を使用して:
$ du -h --max-depth=0 .git
267K .git
--branch
はタグ/ブランチを取ることができます。
https://git-scm.com/docs/git-clone#git-clone---branchltnamegt
--branch
は、タグを取得し、結果のリポジトリのそのコミットでHEADをデタッチします。
[〜#〜] upd [〜#〜]
一言で言えば、「参照」を取ることができます。詳細はこちらをご覧ください:gitエラーメッセージ「サーバーは非広告オブジェクトのリクエストを許可しません」とはどういう意味ですか?
また、次のようなトリックはありません:
git fetch --depth 1 Origin <COMMIT_HASH>
@BenjiWiebe、私の間違いを指摘してくれてありがとう。
即時の答えは次のとおりです。
なぜ?詳細な説明はここにあります: なぜ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>
@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>
Bashでwhile
を使用してみてください:
git clone --depth=1 $url
i=1; while ! git show $sha1; do git fetch --depth=$((i+=1)); done
これは、各コミットを個別にフェッチするため、かなり低速です。 (バッチでコミットを取得し、ネットワーク上のパフォーマンスを向上させるために)増分を増やすこともできますが、それでも総当たり的なアプローチです。