git-ワークツリーと共有リポジトリの違いは?

bwa-

git worktreeコマンドと、-sharedスイッチを使用してリポジトリを複数回複製することにより、リポジトリをローカルで共有することの違いは何ですか?

私の目的は、比較的大きなリポジトリを開発者のマシンのディスクに1回だけ複製し、その1つのリポジトリを複数のブランチでの開発に使用することです。Eclipseを使用しており、Eclipseは現時点ではワークツリーをサポートしていないため、gitワークツリーを使用することはできません

私が試したこととうまくいくように見えることは次のとおりです。

  1. GitLabからリポジトリのクローンを1回作成します。 git clone ssh://host/repo.git repository-master
  2. 共有リポジトリとして何もチェックアウトせずに、再度クローンを作成します。これにより、ディスクスペースを無駄にすることなく、最初のリポジトリにパックファイルへの参照ファイルがいくつか作成されます。git clone --shared repository-master/ repository-branch1/
  3. GitLabリポジトリをリモートとして共有リポジトリリポジトリに追加します-branch1: git remote add gitlab ssh://host/repo.git
  4. データを取得する git fetch
  5. 2番目のクローンリポジトリであるbranch1の新しいローカルブランチに目的のブランチをチェックアウトします。 git checkout -b branch1 gitlab/branch1

これはすべての問題を解決するようです:

  1. 同時にチェックアウトされた複数のブランチがあります。
  2. コミットを両方のブランチにプッシュできます。
  3. プロジェクトをEclipseにインポートすると、Eclipseがリポジトリを認識します。
  4. ディスク上に複製されたリポジトリは1つだけです。

ここで何かが足りませんか?確かに、利便性以外に、これよりもworktreeコマンドを使用する理由があるはずですか?

火曜日

を使用するクローン--shared(または--shared一部のパス名ベースのクローンから暗黙的に)は、別個のリポジトリです。ハードリンク使用することにより1(オペレーティング・システムによってサポートされなければならない)、あなたはディスクスペースを節約するすべての良さを取得、2、Gitは既存のデータを上書きすることはありませんので、それだけでは比較的まれなケースでは、新たなデータやを、追加し、合計安全性ファイルのリンクを解除します。これにより、ファイルを使用するGitリポジトリの数が減るだけなので無害になります。

作業ツリーで作られたが、git worktree add、ではない別のリポジトリ。あなたが行うすべてあなたがしていることを任意のブランチやタグに、その作業ツリーではないという作業ツリー内には、すぐにリポジトリを共有する他のすべての作業の木で見られています。ワークツリーには、独自のHEAD(通常はブランチ名にアタッチされますが、オプションでデタッチされます)、独自のインデックス、そしてもちろん独自のワークツリーがあります。他のほとんどすべてが共有されます(forなど、魔法のようにプライベートな参照が他にもいくつかありgit bisectますが、たとえば、スタッシュはワークツリー間で共有されます)。

既存のプロセスは問題ありません。脚注2で説明されているように、ディスクスペースの共有は最終的に低下することに注意してください。


1基になるファイルオブジェクトへのハードリンクを作成すると、新しい名前が追加され、リンク数が増加します。リンク数は常にファイル名前の数を表します。上記のリンク解除操作は、ファイルの削除ではなく、名前の削除です。ファイル自体は、最後の参照がなくなったときにのみ消えます。

2この節約は、時間の経過とともに低下します。2つの別々のリポジトリは、最初はすべての基盤となるストレージを共有しますが、ある時点で、1つのリポジトリが、緩いオブジェクトをパックするか、既存のパックを再パックして、いくつかのリンクを切断することを決定します。もう一方のリポジトリには、本質的に、独自のプライベートコピーがあります。最終的には、すべてのリンクが切断された可能性があるため、各リポジトリは完全に独立しています。リポジトリは引き続き機能しますが、スペースを節約することはできなくなりました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネットワーク共有フォルダーのGITリポジトリでの同時実行性

分類Dev

ネットワーク共有のリポジトリでgitフックを実行すると、どのバイナリが使用されますか?

分類Dev

ネットワークドライブ上のgitリポジトリを共有する

分類Dev

共有Gitリポジトリの.editorconfig

分類Dev

gitワークツリーを使用したDocker:致命的:gitリポジトリではありません

分類Dev

gitマージとgithubプルリクエストの違い

分類Dev

gitを使用して共有フォークリポジトリを更新する

分類Dev

GitツリーオブジェクトとGitの用語

分類Dev

「mega」共有フォルダのgitリポジトリに「fatal:badobjectHEAD」というエラーがあります。それを防ぐ方法は?

分類Dev

GITはリソースを複数のリポジトリに共有します

分類Dev

WindowsとLinuxからアクセスした場合の共有ディレクトリリポジトリの異なるgitステータス

分類Dev

既存のgitリポジトリを変更して、リモートリポジトリと履歴を共有します

分類Dev

WindowsとWSL間でgitリポジトリのシンボリックリンクを共有する

分類Dev

作業ツリーのないリポジトリでのGit操作?

分類Dev

gitリポジトリルートのTFSワークフロー変数

分類Dev

gitのリポジトリとブランチの違いは何ですか?

分類Dev

GIT:2つのデスクトップとラップトップおよび中央リポジトリ(サーバー共有フォルダー)から作業を同期するワークフロー

分類Dev

gitベアリポジトリ、ワークツリー、トラッキングブランチ

分類Dev

EclipseとGitのワークスペースとリポジトリパスの配置

分類Dev

gitリポジトリにN個の作業ツリーを含めることはできますか

分類Dev

アクセスリンクを介してプライベートgitリポジトリを共有する

分類Dev

gitサブモジュールとサブツリーの違い

分類Dev

Mac OSXからWindows共有フォルダーでホストされているgitリポジトリのクローンを作成します

分類Dev

gitリポジトリのサブツリー/サブディレクトリのクローン作成

分類Dev

共有サーバーからgitリポジトリをプルしてプッシュバックするにはどうすればよいですか?

分類Dev

複製されたGitHubリポジトリのGITワークフロー

分類Dev

ベアGitリポジトリと非ベアGitリポジトリの違い

分類Dev

Gitリポジトリのマージ

分類Dev

gitフックでリポジトリを操作するときの-Cと--git-dirの違い

Related 関連記事

  1. 1

    ネットワーク共有フォルダーのGITリポジトリでの同時実行性

  2. 2

    ネットワーク共有のリポジトリでgitフックを実行すると、どのバイナリが使用されますか?

  3. 3

    ネットワークドライブ上のgitリポジトリを共有する

  4. 4

    共有Gitリポジトリの.editorconfig

  5. 5

    gitワークツリーを使用したDocker:致命的:gitリポジトリではありません

  6. 6

    gitマージとgithubプルリクエストの違い

  7. 7

    gitを使用して共有フォークリポジトリを更新する

  8. 8

    GitツリーオブジェクトとGitの用語

  9. 9

    「mega」共有フォルダのgitリポジトリに「fatal:badobjectHEAD」というエラーがあります。それを防ぐ方法は?

  10. 10

    GITはリソースを複数のリポジトリに共有します

  11. 11

    WindowsとLinuxからアクセスした場合の共有ディレクトリリポジトリの異なるgitステータス

  12. 12

    既存のgitリポジトリを変更して、リモートリポジトリと履歴を共有します

  13. 13

    WindowsとWSL間でgitリポジトリのシンボリックリンクを共有する

  14. 14

    作業ツリーのないリポジトリでのGit操作?

  15. 15

    gitリポジトリルートのTFSワークフロー変数

  16. 16

    gitのリポジトリとブランチの違いは何ですか?

  17. 17

    GIT:2つのデスクトップとラップトップおよび中央リポジトリ(サーバー共有フォルダー)から作業を同期するワークフロー

  18. 18

    gitベアリポジトリ、ワークツリー、トラッキングブランチ

  19. 19

    EclipseとGitのワークスペースとリポジトリパスの配置

  20. 20

    gitリポジトリにN個の作業ツリーを含めることはできますか

  21. 21

    アクセスリンクを介してプライベートgitリポジトリを共有する

  22. 22

    gitサブモジュールとサブツリーの違い

  23. 23

    Mac OSXからWindows共有フォルダーでホストされているgitリポジトリのクローンを作成します

  24. 24

    gitリポジトリのサブツリー/サブディレクトリのクローン作成

  25. 25

    共有サーバーからgitリポジトリをプルしてプッシュバックするにはどうすればよいですか?

  26. 26

    複製されたGitHubリポジトリのGITワークフロー

  27. 27

    ベアGitリポジトリと非ベアGitリポジトリの違い

  28. 28

    Gitリポジトリのマージ

  29. 29

    gitフックでリポジトリを操作するときの-Cと--git-dirの違い

ホットタグ

アーカイブ