問題タブ [sparse-checkout]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - post-receive スクリプトを使用してリモートで Git sparse-checkout を実行する
私は次のことを行う方法を見つけようとしています(そしてそれが可能かどうかも調べています)。
さまざまなことのために多数のフォルダーを含むローカル git リポジトリがありますが、git を使用して Web サイトを開発サーバーにデプロイできるようにしたいと考えており、実際には 1 つのフォルダーのコンテンツのみがリモート Web ルート (のコンテンツのみ) に移動する必要があります。フォルダー自体ではなく、フォルダー自体です。これは難しいことです)。開発サーバーへの git push を Web アクセス可能なフォルダーの外にあるベア リポジトリに移動し、受信後スクリプトを使用してすべての作業ファイルを webroot に配置しています。ただし、これによりすべてのフォルダーがコピーされ、明らかに、操作が完了した後に特定のフォルダーの内容のみを移動したいと考えています。
いくつかの調査を行うと、sparse-checkout が適しているようです。更新:特定のフォルダーのみをコピーする場所で動作していますが、フォルダー自体を無視してコンテンツをプルすることはまだできていません。これは、.git/info/sparse-checkout に追加するパス/ワイルドカードと関係があると思いますが、ディレクトリを除外するパターンが何であるかはわかりませんが、その内容は除外しません。
これを行う良い方法はありますか?スパース チェックアウトを使用して直接コピーするのではなく、受信後スクリプトを使用して必要なディレクトリの内容を手動でコピーする必要がありますか?
誰でも喜んで助けてくれることに感謝します。ありがとう!
git - git 古いリポジトリの一部を新しいリポジトリに移動
ルートにいくつかのディレクトリを含むリポジトリがあります。
そして、その履歴を保持しながら、a のコンテンツのみから新しい git リポジトリを作成したいと思います。これは可能ですか?まばらなチェックアウトを見てきましたが、これを使用してサブディレクトリから(関連する履歴を含む)新しいリポジトリを作成する方法がわかりません。
git - gitsparsecheckout-別のディレクトリにプルする方法
私はpootleを使用して、PHPYiiプロジェクトで.poファイルを翻訳できるようにしています。
翻訳者が.poファイルを更新すると、Pootleは翻訳をプルおよびプッシュできます。これとは別に、サイトで作業している開発者がいます。開発者は、翻訳ファイルを更新して、翻訳するテキストを追加することもできます。
Yiiでは、.poファイルを次の場所に配置する必要があります。
yii-project / protected / messages / en_gb / messages.po
Pootleでは、ディレクトリ構造が次のようになっている必要があります。
pootle / yii-project / en_GB / messages.po
pootleをプル&プッシュするには、.gitディレクトリがpootle / yii-project/.gitにある必要があります。
git sparse checkoutを使用してみましたが、ファイルがpootle / yii-project / protected / messages / en_gb / messages.poにプルされますが、残念ながらpootleはそれを取得しません。
他の場所でリポジトリをプルしてからソフトリンクを実行することはできません。そうすると、pootleは.gitディレクトリを見つけることができなくなります。
私が本当にやりたいのは、ディレクトリのスパースチェックアウトと結果を別のディレクトリにマップすることです。つまり、チェックアウトです。
pootle / yii-project / protected / messages /-> pootle / yii-project
開発者または翻訳者のいずれかがファイルを更新できるようにしたいので、git-subtreeを使用したくありません。余分なプルオーバーヘッドが気に入らないため、サブモジュールを使用したくありません。開発者には、新しい機能に関連するすべての変更を1回のコミットに含める必要があります(メインプロジェクトでの1回のコミットではなくサブモジュールに1つ)。
助言がありますか?
java - JGitでスパースチェックアウトを実装するにはどうすればよいですか?
Github リポジトリの特定のサブ ディレクトリの内容を取得し、それを自分のディレクトリに配置する必要があります。多くの調査の結果、まばらなチェックアウトが進むべき道のようです。ただし、JGit を使用してこれを実装する方法については、少しわかりません。
git - git チェックアウト . スパースチェックアウトによって除外されたディレクトリを追加します
スパース チェックアウト シナリオでは、このコマンドgit checkout .
は無視すべきディレクトリを復元します。これは仕様によるものですか、それとも Git の潜在的な問題ですか? 作業コピーに加えた変更を破棄するために使用git checkout .
しています。同じことを行い、この問題に悩まされない別のコマンドはありますか?
再現可能な例を次に示します。
ここまでは順調ですね。問題は次のとおりです。
ところで:
質問除外されたファイルが git sparse チェックアウトで再表示されるのはなぜですか? 関連していますが、はるかに古く、私が見ているものを完全に説明していません.
git - サブディレクトリを git reset --hard する方法は?
UPDATE² : Git 2.23 (2019 年 8 月) では、これを行う新しいコマンドがあります。受け入れられた回答
git restore
を参照してください。更新:これはGit 1.8.3の時点でより直感的に機能します。私自身の回答を参照してください。
次の使用例を想像してみてください: Git 作業ツリーの特定のサブディレクトリにあるすべての変更を取り除き、他のすべてのサブディレクトリはそのままにしたいと考えています。
できます
git checkout .
が、git checkout . スパースチェックアウトによって除外されたディレクトリを追加しますはありますが
git reset --hard
、サブディレクトリに対しては実行できません。を使用して現在の状態をリバース パッチできます
git diff subdir | patch -p1 -R
が、これはかなり奇妙な方法です。
この操作に適した Git コマンドは何ですか?
以下のスクリプトは、この問題を示しています。How to make files
コメントの下に適切なコマンドを挿入します。現在のコマンドはa/c/ac
、スパース チェックアウトによって除外されるはずのファイルを復元します。明示的に復元したくないことに注意してくださいa/a
and a/b
、私は「知っている」だけで、a
以下のすべてを復元したい. EDIT:そして、私は「知らない」b
、または他のどのディレクトリが と同じレベルにあるかも知りませんa
。
git - Gitスパースチェックアウト後の作業コピーのディレクトリが多すぎます
ルートに210以上のディレクトリを持つgitレポジトリ(リモートはgithubでホストされています-これをクライアントレポジトリと呼びましょう)があります。210以上のWindowsサーバーがあり、それぞれがこれらのルートディレクトリの1つを必要とし、実際には他のディレクトリを必要としません。
したがって、サーバーの1つにログインし、1.8.1.msysgit.1を使用します。
- gitハブからクライアントリポジトリのクローンを作成します
- スパースチェックアウトをオンにする
- このサーバーの作業コピーに必要な単一の*ディレクトリ/*でスパースチェックアウトファイルを更新します
- ツリーの読み取り操作を実行します
そして、10回のうち9回はすべてが正常に機能し、作業コピーには期待する単一のディレクトリが含まれています。
ただし、ときどき期待どおりに機能せず、他のいくつかのディレクトリも作業コピーに流れ込んでしまいます。完全な210以上になることはありませんが、他の6〜10個のディレクトリになります。これらのディレクトリは、目的のディレクトリのパターンと一致していません。また、上記のパターンに一致するサブディレクトリもありません。
これが発生すると、ローカルリポジトリを解決できませんでした。私たちは試しました:
- さまざまなリセット
- さまざまな読み取りツリー
- sparse-checkoutを無効/再度有効にする
- ログを調べて、何か奇妙なことが起こったかどうかを確認します
最終的には、通常、同じ手順を再度実行してローカルリポジトリを削除することになり、2回目だけで機能します。
クローン作成、スパースチェックアウトの設定などを繰り返し行う以外に、問題を確実に再現する方法はまだ見つかっていません。これが発生した20回ほどのうち、Windows以外のマシンで1回だけ発生しました(2週間前に同じ問題を表示したgit v1.8.1.5を実行しているubuntuサーバーがありました)。
私のGoogle-Fuはこれに弱いです。これが発生している理由と、リポジトリを削除して再クローンを作成する必要がない潜在的な回避策についての洞察をいただければ幸いです。前もって感謝します!
windows - git sparse checkoutがディレクトリを残すのはなぜですか?
背景:私の会社のサービスモデルは、アプライアンスベースのサーバーモデルとして始まりました。クライアントに、WebサーバーとソフトウェアがプリロードされたWindowsServer2003/2008を搭載したサーバーを送信します。クライアント固有の構成をすべてGitリポジトリに移動し、sparse-checkoutを使用して、クライアントのソフトウェアが正しく機能するために必要なものだけを各サーバーに含めるようにします。
スパースチェックアウトを設定しているときに、大きな矛盾が発生しました。やります
期待される結果は
しかし、私たちは
毎回新しいディレクトリで何度も試しましたが、毎回問題が発生しました。私のju-git-suはここで私を失敗させます。gitバージョン1.8.1.msysgit.1を使用しています。
ご協力いただきありがとうございます。さらに情報を提供する必要がある場合はお知らせください。
---編集1---
明確化:リポジトリは、クライアントの構成ディレクトリに他なりません。各クライアントはリポジトリ内に異なるディレクトリを持っており、各クライアントの個々のサーバーでスパースチェックアウトを試みているため、問題のクライアントを除くすべてを除外しようとしています。
---編集2---
ただの更新で、Windowsフォルダーのアクセス許可がおかしいことが判明し、Gitは空でないディレクトリを削除しようとしていました。空のフォルダを削除して修正しました。助けてくれてありがとう!
git - 複数のリポジトリからの複数の git サブツリー、ディレクトリ レイアウトのオフセット
2 つの異なる git リポジトリがあるとします。
これまでのところ、(sparsecheckout を使用して) 以下のみを管理しました。
しかし、私は本当に次の方法でそれらを組み立てたいと思っています:
また、work-repo/dir11 の変更を repo-1/dir11 にコミットすることもできます。/dir22 と /dir23 についても同様です。
git-subtree でそのようなことを達成することは可能ですか? (またはその他の git 拡張機能/コマンド)
c# - 空の深さでのチェックアウト後のリポジトリの更新
私はSharpSVNを使用しています。チェックアウト メソッドのロジックを 2 つのステップに分割するにはどうすればよいですか。
- 空の svn フォルダーを作成する
- HEAD リビジョンへの更新
SvnDepth.Empty
引数を使用して最初のステップを行う方法は次のとおりです
しかし、次のように更新しようとすると:
更新がありません。svn サーバーのリポジトリが空ではありません。
問題は、空の深さでチェックアウトを行った後、最新のリビジョンに正しく更新するにはどうすればよいかということです。