3

CVS では、「rtag」コマンドを使用して既存のソースの新しいブランチをプログラムで作成できましたが、これにはリポジトリのコピーは必要ありませんでした。

git はこの種の機能をサポートしており、既存のファイルのローカル コピーを持たずにリモート git リポジトリにブランチを作成しますか? それとも、git の分散型の性質がこれを妨げているのでしょうか?

(「git branch」コマンドを実行するだけで、リポジトリの独立したコピーを作成するのにかかる20分以上を節約しようとしています。)

追加情報を編集:

ブランチ「ReleaseCandidate」と「makearelease.sh」というスクリプトを含む cvs リポジトリがある場合、スクリプトはランダムな空のディレクトリで「cvs rtag -r ReleaseCandidate -b Release1p0」などのコマンドを実行し、新しい'ReleaseCandidate' ブランチのすべてのファイルを含む 'Release1p0' という名前のブランチであり、リポジトリまたは CVS ブランチ 'ReleaseCandidate' からのファイルのローカル コピーは必要ありません。

4

2 に答える 2

5

git では、すべてのリポジトリは常にローカルです。ローカル リポジトリへのリモート インターフェイスを持つことはできます (たとえば、github の API が提供するものです。リポジトリは github に対してローカルであり、API はインターフェイスです)。ただし、リポジトリ自体はローカルです。したがって、「リモート リポジトリ」などというものはありません。ここでいう意味では、単なる「リモート インターフェイス」です。

とは言っても、プッシュ プロトコルはリモートの参照を受け取ることから始まるため、実際にローカル クローンを持たなくても、組み込みのリモート インターフェイス (たとえば、git が ssh 経由で使用するプッシュ プロトコル) を使用して、新しいブランチまたは軽量タグを作成することが可能です。 (a la git ls-remote)、その後、プッシュを実行するシステムは、オブジェクト パック、ref 更新、またはその両方を送信できます。既知の (受信した参照からの) ヘッド SHA1 を使用してrefs/heads/fooor参照を送信し、それを良いと呼ぶこともできます。 refs/tags/foo、間違ったコミット。したがって、これを行うために git に組み込まれているものは何もありません。

したがって、1 つ書くことはできますが、おそらく 20 分以上かかるでしょう。:-)

于 2013-11-05T21:51:35.697 に答える
0

何を尋ねているのかわかりません。ファイルをコピーせずにリポジトリの新しいブランチを作成できるかどうか尋ねている場合、答えはイエスです。git checkout -b. これにより、ファイルはまったくコピーされません。

リモート リポジトリの部分的なバージョンを作成できるかどうかを尋ねる場合、答えはノーです。すべての git リポジトリは、リポジトリの完全なクローンです。部分リポジトリの概念はありません。これは git 内部で必要です。(ツリーの SHA-1 ハッシュを構築するには、ツリー内のすべてのファイルをハッシュする必要があります。ツリーの部分的なコピーを作成しようとすると、その SHA-1 ハッシュは、その SHA-1 ハッシュとは異なります。部分的に複製しようとしているブランチ. 実際には、それらは単に同じ祖先を指す異なるコミットになります.)

git の履歴をすべてダウンロードせずに、ローカルの作業ディレクトリをリモートの非ベア リポジトリの作業ディレクトリのように見せることができるかどうかを尋ねる場合、答えは「はい」です (編集:「浅いクローン」を使用して、訂正していただきありがとうございます) 、しかし、それはあなたが望んでいるように見える方法でリモコンとやり取りするのに役立ちません.

于 2013-11-05T21:09:14.543 に答える