4

アプリケーションをビルドするときは、まず CVS リポジトリのディレクトリからコードを取得してからビルドします。では、Git でそれを行うのに似たようなことはありますか。Git リポジトリの特定のディレクトリからチェックアウトして、コードをビルドしたいだけです。ローカルリポジトリのメンテナンスはありません。コードをチェックアウトするだけです。

「スパース チェックアウト」と呼ばれるものがあることは知っています。もっと簡単なものはありますか?

私の問題は、このビルド スクリプトが任意のサーバーで実行できることです。したがって、スパース チェックアウトを選択した場合は、各サーバーに移動し、Git をセットアップして、スパース チェックアウトの方法を指示する必要があります。

4

3 に答える 3

5

あなたの質問に文字通り答えるには、次のことを行う必要があります。

一時ディレクトリでリポジトリ データを取得する

mkdir path/to/temporary && cd path/to/temporary
git clone <repo-url> --depth 1 --bare

そして、別のディレクトリに必要なディレクトリをチェックアウトします

git --work-tree=/path/to/checkout checkout HEAD -- sub/directory

その後、一時的なものを削除して、チェックアウトを操作できます。

もちろん、これは簡単にスクリプトに入れることができます!

于 2013-07-24T13:36:11.257 に答える
2

Git の哲学は CVS とはかけ離れているため、ここでは別の方法で行動することをお勧めします。Git リポジトリが配布され、すべての開発者またはサーバーがそのコピーを持ち、そのうちの 1 つが権限を持ちます ( originGit 用語ではリモート)。

新しいチェックアウトからビルドを開始したい場合、最初に Git に から最新の変更を取得するように指示しoriginます。これはフェッチと呼ばれます。

git fetch origin

次に、新しいチェックアウトを行うために、ファイルシステムをサーバーのバージョンとまったく同じにし、他のファイルを含めないようにします。

git checkout --force origin/master
git clean -d --force

ここでの利点は、ネットワーク操作が非常に効率的であることです。同期したいサーバーから最新の差分のみを取得し、適切なファイルを変更せずにビルドしていることを確認できます。

Git リポジトリと非常によく統合されている Jenkins などの継続的インテグレーション用のツールも確認する必要があります。

于 2013-07-24T13:02:32.820 に答える
1

オプションを使用してリポジトリのクローンを作成し--depth、ニーズに合っているかどうかを確認できます。--depth オプションは完全なリポジトリ履歴を複製しないため、高速になります。

> git clone http://myrepo.git --depth 1

ブランチ名を指定することで、チェックアウトをさらに制限できます。

> git clone http://myrepo.git -b master --depth 1

gitリポジトリのサブディレクトリのみをチェックアウトしたい場合、AFAIKは現在不可能です。

于 2013-07-24T12:56:11.547 に答える