3

背景:私の会社のサービスモデルは、アプライアンスベースのサーバーモデルとして始まりました。クライアントに、WebサーバーとソフトウェアがプリロードされたWindowsServer2003/2008を搭載したサーバーを送信します。クライアント固有の構成をすべてGitリポジトリに移動し、sparse-checkoutを使用して、クライアントのソフトウェアが正しく機能するために必要なものだけを各サーバーに含めるようにします。

スパースチェックアウトを設定しているときに、大きな矛盾が発生しました。やります

git clone git@github.com:ourclientconfigrepo.git .
git config core.sparsecheckout true
echo www.thisclient.com/ > .git/info/sparse-checkout
git read-tree -m -u HEAD

期待される結果は

ls
www.thisclient.com/

しかし、私たちは

ls
www.thisclient.com/
www.randomclient1.com/
www.randomclient2.com/
www.randomclient3.com/

毎回新しいディレクトリで何度も試しましたが、毎回問題が発生しました。私のju-git-suはここで私を失敗させます。gitバージョン1.8.1.msysgit.1を使用しています。

ご協力いただきありがとうございます。さらに情報を提供する必要がある場合はお知らせください。

---編集1---

明確化:リポジトリは、クライアントの構成ディレクトリに他なりません。各クライアントはリポジトリ内に異なるディレクトリを持っており、各クライアントの個々のサーバーでスパースチェックアウトを試みているため、問題のクライアントを除くすべてを除外しようとしています。

---編集2---

ただの更新で、Windowsフォルダーのアクセス許可がおかしいことが判明し、Gitは空でないディレクトリを削除しようとしていました。空のフォルダを削除して修正しました。助けてくれてありがとう!

4

2 に答える 2

3

クローン操作は、スパースクローンを作成する正しい方法ではありません。それ以外の:

git clone ...

次のシーケンスを使用する必要があります。

mkdir repo ; cd repo ; git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
于 2018-06-14T19:33:56.620 に答える
0

部分的な解決策:git-read-tree(1)によると、!を入力することで特定のファイルを除外できます。ファイル名の前。ただし、これは誤記の可能性があります(つまり、ファイルではなくディレクトリにも当てはまります)。

調査を続けます。

https://stackoverflow.com/a/11222033/1210278によると、手動でディレクトリにマークを付けることができますgit update-index --skip-worktree www.randomclient1.com/

https://stackoverflow.com/a/9575837/1210278は、除外がディレクトリ専用であることを意味し、それにいくつかのバグがあることを示しています。

于 2013-03-25T16:01:34.127 に答える