[解決済み】リモート Git リポジトリから特定のコミットを取得する
質問
リモート Git リポジトリを自分の PC にクローンすることなく、特定のコミットだけを取得する方法はありますか? リモート リポジトリの構造は私のものとまったく同じであり、したがって、競合は発生しませんが、これを行う方法がまったくわかりませんし、その巨大なリポジトリをクローンしたくありません。
私はgitに新しいです、何か方法はありますか?
どのように解決するのですか?
Git バージョン 2.5+ (Q2 2015) からは、単一のコミットを (フルリポジトリをクローンせずに) フェッチすることが実際に可能になりました。
以下を参照してください。
コミット 68ee628
によって
フレドリック・メドレー (
moroten
)
, 2015年5月21日。
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミット a9d3493
, 2015年06月01日) にあります。
これで、新しいコンフィグ(サーバー側)ができました。
uploadpack.allowReachableSHA1InWant
許可する
upload-pack
は、任意の ref tip から到達可能なオブジェクトを要求するフェッチ要求を受け入れることを許可します。しかし、オブジェクトの到達可能性を計算するのは計算量が多いことに注意してください。
デフォルトはfalse
.
そのサーバーサイドの設定と浅いクローンを組み合わせると(
git fetch --depth=1
) を使えば、単一のコミットを要求することができます (
t/t5516-fetch-push.sh
:
git fetch --depth=1 ../testrepo/.git <full-length SHA1>
を使うことができます。
git cat-file
コマンドを使用すると、コミットが取得されたことを確認できます。
git cat-file commit <full-length SHA1>
<ブロッククオート"
git upload-pack
"を提供するものです。git fetch
を提供する " を指定することができます。 どの ref の先端にもないコミットでも、それが で、どの参照からも到達可能であればuploadpack.allowReachableSHA1InWant
設定変数で指定します。
SHA は省略されていない完全な SHA でなければならないことに注意しましょう。そうしないと、Git はコミットを見つけることができなかったと主張します。
完全なドキュメントは
<ブロッククオート
upload-pack
: オプションで到達可能な sha1 の取得を許可します。
とは
uploadpack.allowReachableSHA1InWant
の設定オプションがサーバ側で設定されている場合、 "
git fetch
" は、宣伝されていない (帯域外またはサブモジュールのポインタから取得された可能性が高い) オブジェクトを指定する "want" 行を持つリクエストを作ることができます。
ブランチの先端から到達可能なオブジェクトのみ、つまりアドバタイズされたブランチと
transfer.hideRefs
によって隠された枝の和であり、処理されます。
到達可能性を確認するために履歴を遡らなければならないという関連コストがあることに注意してください。
この機能は、あるコミットの内容を取得するときに使用できます。 を取得するときに使用できます。 リポジトリ全体をクローンすることなく、特に浅いフェッチが使用されている場合に使用できます。 .
便利なケースは、例えば
- 履歴に大きなファイルを含むリポジトリ。
- サブモジュールのチェックアウトに必要なデータのみをフェッチする。
-
どのブランチに属しているかを正確に伝えることなく sha1 を共有する場合、および Gerrit において変更数ではなくコミット数で考える場合。
(Gerritの場合は、すでにallowTipSHA1InWant
を通して解決されています)
Git 2.6 (2015年第3四半期) では、そのモデルが改善される予定です。
参照
コミット 2bc31d1
,
コミット cc118a6
(2015年7月28日)によって
ジェフ・キング (
peff
)
.
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミット 824a0be
, 2015年8月19日)
<ブロッククオート
refs
サポート 否定的transfer.hideRefs
を使用して参照階層を非表示にした場合。
transfer.hideRefs
で非表示にした場合、後でその設定を上書きして "unhide" する方法はありません。
このパッチは、別のマッチがそれを隠す場合でも、マッチを直ちに非表示としてマークさせる "negative"隠すを実装しています。
これにより、通常の "last one wins" 設定優先順位が機能するようになります (そして、.git/config
は、例えば
/etc/gitconfig
).
というわけで、できるようになりました。
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
を隠す
refs/secret
をすべてのレポで、ある特定のレポの公開ビットを除いて
を、特定のレポで隠すことができます。
Git 2.7 (2015年11月/12月) で再び改善される予定です。
参照
コミット 948bfa2
,
コミット 00b293e
(2015年11月05日)を参照してください。
コミット 78a766a
,
コミット 92cab49
,
コミット 92cab49
,
コミット 92cab49
(2015年11月03日)を参照してください。
コミット 00b293e
,
コミット 00b293e
(2015年11月05日)、および
コミット 92cab49
,
コミット 92cab49
,
コミット 92cab49
,
コミット 92cab49
(2015年11月03日)によって
Lukas Fleischer (
lfos
)
.
ヘルプドバイ
エリック・サンシャイン (
sunshineco
)
.
(によって統合されました。
ジェフ・キング
peff
--
で
コミット dbba85e
, 2015年11月20日)。
<ブロッククオート
config.txt
のセマンティクスを文書化したものです。hideRefs
を名前空間とする
今のところ、どのように
transfer.hideRefs
がどのように振る舞うべきかという明確な定義はありません。
がどのように動作するかの明確な定義はありません。
説明すると
hideRefs
の接頭辞はその場合、ストリップされた名前と一致します。このように
hideRefs
パターンが現在
が処理される方法です。
hideRefs: 完全参照のマッチングのサポートを追加しました。
ストリップされた参照へのマッチングに加えて
hideRefs
パターンを追加し、完全な (ストリップされていない) 参照をマッチさせることができるようになりました。
ストリップされたものと完全なものとを区別するために、これらの新しいパターンには プレフィクスとして円記号 (^
).
したがって 新しいドキュメント :
transfer.hideRefs:
名前空間が使用されている場合、名前空間プレフィックスは各参照から取り除かれてから
transfer.hiderefs
パターンにマッチします。
例えば、もしrefs/heads/master
で指定されている場合transfer.hideRefs
であり を指定すると、現在の名前空間はfoo
であり、次にrefs/namespaces/foo/refs/heads/master
は広告から省かれますがrefs/heads/master
とrefs/namespaces/bar/refs/heads/master
は、今でもいわゆる 行として宣伝されています。
ストリップする前に参照にマッチさせるために^
の前に を追加します。もしあなたが!
と^
,!
を先に指定する必要があります。
R..
言及
コメントで
設定
uploadpack.allowAnySHA1InWant
であり、これによって
upload-pack
を受け入れることができます。
fetch
リクエストを受け入れるようにします。(デフォルトは
false
).
参照
コミット f8edeaa
(2016年11月、Git v2.11.1)によるものです。
David "novalis"ターナー (
novalis
)
:
<ブロッククオート
upload-pack
: オプションで任意の sha1 を取得することができます。
の場合、到達可能性チェックを行うのは少し馬鹿げているように思えます。 ユーザーがリポジトリ内の絶対的なすべてにアクセスすることを信頼する場合、到達性チェックを行うのは少し馬鹿げているようです。
また、分散システムにおいては、それは無作法です。 あるサーバーが参照元をアドバタイズし、別のサーバーがその参照元をフォースプッシュした場合。 おそらく、2 つの HTTP リクエストは、これらの異なるサーバーに向けられることになるでしょう。 サーバーに向けられることになります。
Git 2.34 (2021年第4四半期) で、"。
git upload-pack
"
(
人
)
の反対側で実行される
git fetch
(
男
)
は、want-ref リクエストを処理するときに ref 名前空間を考慮することを忘れていました。
参照
コミット 53a66ec
,
コミット 3955140
,
コミット bac01c6
(2021 年 8 月 13 日) によるものです。
キム・アルティントップ (
kim
)
.
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミット 1ab13eb
2021年9月10日)
<ブロッククオート
docs
: transfer.hideRefs と名前空間の相互作用を明確にする。署名: Kim Altintop
レビュー執筆者:Jonathan Tan
のドキュメントにある名前空間についてのセクションを拡張してください。
transfer.hideRefs
との微妙な違いを指摘するために
upload-pack
と
receive-pack
.
3955140
("
upload-pack.c
: want-ref を名前空間に対して相対的に扱う", 2021-07-30, Git v2.34.0 --。
マージ
に記載されている
バッチ #5
を教えました。
upload-pack
を拒否する
want-ref
を拒否することに言及されました。
隠された参照の名前は決して明らかにされませんが、それが指すオブジェクトIDは明らかにされるかもしれないことが明らかにされています。
git config
に含まれるようになりました。
を追加しました。
:
に対してマッチする前に
transfer.hiderefs
のパターンがあります。パターン
ストリップする前に参照にマッチさせるために
^
を加えます。もし
を組み合わせると
!
と
^
,
!
を先に指定する必要があります。
git config
に含まれるようになりました。
を追加しました。
:
が省略された広告が表示されます。もし
uploadpack.allowRefInWant
が設定されている場合は
upload-pack
は
want-ref refs/heads/master
をプロトコル v2 の
fetch
コマンドのように
refs/namespaces/foo/refs/heads/master
が存在しないかのようなコマンドです。
receive-pack
は、一方では、名前に言及することなく、まだ
は、その名前に言及することなく、参照先のオブジェクトIDを宣伝します(いわゆる "。
.hav
e"行)。
関連
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] サブモジュールを含む "git clone "の方法は?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ローカルにない作業がリモートに含まれているため、アップデートが拒否された
-
[解決済み] git rebase fatal: 必要なリビジョンは1つです。
-
[解決済み】未マージファイルがあるため、Gitマージができない
-
git commits with an error: 更新が拒否されました。現在のブランチの先端が、このブランチより後ろにあるためです。
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] 特定のコミットまで Git でプル
-
[解決済み] Git で単一のブランチをクローンする方法を教えてください。
-
[解決済み] 特定のリビジョン/チェンジセットでgitリポジトリをクローンする方法は?
-
[解決済み】-depth 1でcloneを浅くし、コミットを作成し、再び更新をpullするのは安全ですか?
-
[解決済み] 浅いgitサブモジュールの作り方は?