2016-04-19 1 views
1

私はコードにアクセスできるプロジェクトに取り組んでいますが、バージョンコントロールをソースディレクトリ自体に追加することはできません。 (主な開発者は自分のソースコントロールを持っていますが、ここでは関係のない理由でアクセス可能/分かりにくいなどはありません)。gitを使って別のディレクトリの変更を追跡するには?

私の正気を保ち、他の開発者が行った変更を追跡するために、何らかの種類のバージョン管理システムをセットアップするのが好きです。 (GitはVSSの暗黒時代以来使ってきた唯一のバージョン管理システムなので、おそらく私が使用するものです)

私の現在の計画は、既存のコードベースをミラー化し、gitをローカルで初期化することです。しかし、他の開発者が変更を加えたときに、ローカルコピーを実際のソースと比較できるようにする必要があります。

私の質問:

  1. が、これは合理的な戦略ですか?
  2. その場合は、git init --bareまたはgit initと設定する必要がありますか?
  3. ローカルコピーと実際のソースをどのように比較すればよいですか? diff -qNr source/ local-source/git diff --no-index source/ local-source/?他に何か?
+0

スパゲッティのソリューションをハッキングするよりも、外交でこれを解決するほうがはるかに良いです。 – Amit

+0

@Amit:開発者が途上国に移動し、インターネットにアクセスすることはめったにないので、通信は散発的ですが、彼は作業するソフトウェアのコピーを持っているからです)。 – Charles

答えて

3

まず、少し背景。 、これらの概念がきれいに分離されているのGitでは

  • のGitリポジトリ:
  • Gitリポジトリのデータが含まれている作業ツリー:あなたが実際に

ときに動作し、あなたのファイルシステム内のディレクトリツリーローカルのGitリポジトリをgit init /some/pathで作成し、/some/path/.gitにGitリポジトリを作成し、/some/path以下のGitコマンドを実行すると、Gitはリポジトリを見つけ、0123の作業ツリーを想定します。あなたの状況に今の

私は、コードへのアクセス権を持っていますが、ソースディレクトリ自体にバージョンコントロールを追加することはできませんプロジェクトに取り組んでいます。

あなたがソースディレクトリ自体の外にGitリポジトリを作成すること、それに応じてGIT_DIR(レポ)とGIT_WORK_TREE(作業ツリー)変数を設定することができますための興味深いオプション。することができますcd /srv/projectその後

git init --bare /my/projects/repo.git 
export GIT_TREE=/my/projects/repo.git 
export GIT_WORK_TREE=/srv/project 

、あなたが/srv/projectで定期的にGitプロジェクトを持っていたかのようにGitが/srv/project/.gitでGitのリポジトリと(、コマンドを実行します。ソースディレクトリが/srv/projectである場合 たとえば、あなたがこれを行うことができます)。いつものようにGitコマンドを使うことができ、すべてのリポジトリ操作は/my/projects/repo.gitに行われます。

実際のGitリポジトリでは、この他のリポジトリをリモートとして使用し、Git操作を使用して自分のブランチと比較することができます。

こちらがお役に立てば幸いです。

+1

それは素晴らしいです!私は彼らが分かれていることは分かっていましたが、私はあなたが自分たちの場所をリセットできることを認識しませんでした。私は今これを試してみよう! – Charles

2

この問題の標準的な解決方法は、入力コードを「ベンダーブランチ」として扱うことです。単にベンダーブランチを作成してください(孤立したブランチ、無関係のブランチ、別のリポジトリー内にあるコード、または別のリポジトリーとして)、初期バージョンを追加してコミットしてください。更新版を入手したら、それをベンダーブランチ(またはベンダーリポジトリー)に入れ、いつものようにコミットします。

ベンダーのバージョンを別個のリポジトリとして扱うには、サブモジュールを使用できます(これは、実際にはわかります)。

関連する問題