5

Android ソースrepoによって管理されます。リポジトリを使用して同期すると、ディレクトリ.repo/projects/が作成されます。このディレクトリには、現在の作業ディレクトリに直接チェックアウトされたすべての git リポジトリが含まれており、ベア git 形式になっています。

repo はどのような目的でベア git リポジトリを維持しますか? そして、これらの裸のリポジトリはレポによってどのように使用されますか?

(注:明確化:「レポ」と書いているとき、私はgitリポジトリについて話しているのではありませんrepo.Androidソースを構成するすべてのgitリポジトリを維持するために、Androidによって作成された/ for Androidと呼ばれるスクリプトについて具体的に話しています。)

4

3 に答える 3

6

.repo/projects/Android リポジトリ マニフェスト システムをしばらく使用した後、ディレクトリ内の裸のリポジトリの目的を理解したと思います。

@Fredrik プロジェクトによって既に回答されているように、によって作成された「クローン」に直接表されるリポジトリの別のコピーはありませんrepo。実際、.gitクローン内のすべてのディレクトリの内容は、次のように単なるシンボリック リンクです。

$ ll development/.git/
total 452
drwxr-xr-x  2 bfh bfh   4096 2011-08-15 13:55 ./
drwxr-xr-x 20 bfh bfh   4096 2011-08-15 13:55 ../
lrwxrwxrwx  1 bfh bfh     43 2011-08-15 13:55 config -> ../../.repo/projects/development.git/config
lrwxrwxrwx  1 bfh bfh     48 2011-08-15 13:55 description -> ../../.repo/projects/development.git/description
-rw-r--r--  1 bfh bfh     41 2011-08-15 13:55 HEAD
lrwxrwxrwx  1 bfh bfh     42 2011-08-15 13:55 hooks -> ../../.repo/projects/development.git/hooks/
-rw-r--r--  1 bfh bfh 449008 2011-08-15 13:55 index
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 info -> ../../.repo/projects/development.git/info/
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 logs -> ../../.repo/projects/development.git/logs/
lrwxrwxrwx  1 bfh bfh     44 2011-08-15 13:55 objects -> ../../.repo/projects/development.git/objects/
lrwxrwxrwx  1 bfh bfh     48 2011-08-15 13:55 packed-refs -> ../../.repo/projects/development.git/packed-refs
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 refs -> ../../.repo/projects/development.git/refs/
lrwxrwxrwx  1 bfh bfh     45 2011-08-15 13:55 rr-cache -> ../../.repo/projects/development.git/rr-cache/
lrwxrwxrwx  1 bfh bfh     40 2011-08-15 13:55 svn -> ../../.repo/projects/development.git/svn

したがって、実際の git リポジトリはクローン内で 1 回だけ表されます。

裸の git と通常の git を保持する理由は、マニフェスト システムの動作方法のためです。マニフェスト システムは、チェックアウトされる git のコレクションと、チェックアウトされるバージョンを指定する方法です。マニフェスト ファイル自体は git で管理されており、repo コマンドを使用すると、そのマニフェスト git のブランチを自由に変更できます。

したがって、マニフェスト ファイルで現在選択されているものに応じて Git を削除および追加する (高速) 方法を可能にするために、リポジトリは、これまでにクローンしたすべての git を.repo/projectsフォルダーに保持し、それらを「通常の」クローンにのみコピーすることができます。それらがマニフェスト ファイルの現在のブランチで選択されている場合は、領域。

于 2011-08-30T07:04:30.700 に答える
4

2 つのコピーではありません.git。コンポーネント内のフォルダーには、対応するコンポーネントへのシンボリック リンクが含まれています。./repo/projects

于 2011-05-27T11:55:26.990 に答える
0

免責事項: 私は Git の専門家ではありません。

コードをチェックアウトすると、2 つのコピーが得られると言っていると思います。1 つは作業コピー (コピー先として指定した場所) で、もう 1 つは .repo/projects に保持されます。質問を正しく解釈したと仮定すると、.repo/projects のコピーが保持されているため、サーバーに戻ることなく、チェックアウトした基本リビジョンとすばやく比較して元に戻すことができると思います。VCSがそうするのはかなり一般的だと思います。SVN は、作業コピーのすべてのフォルダーに .svn フォルダーを配置し、それらにベース リビジョン ファイルを配置することによってこれを行います。

于 2011-05-27T11:47:17.577 に答える