問題タブ [git-daemon]
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 - Git デーモンのログ、それを有効にしてログをファイルに保存する方法 (例: /var/log/git.log?)
これが、このような質問を投稿する SE の適切なセクションではないと思われる場合は、どこに投稿すればよいか教えてください。移動します。
ともかく。launchd で動作する OS X マシンをgit daemon
セットアップしました。内部の .plist ファイルは次の/Library/LaunchDaemons/
とおりです。
すべてが魔法のように機能しますが、デーモンはその情報を に記録します/var/log/system.log
。その情報(stdout、stderr)を専用のファイルに記録するように指示する方法はあります/var/log/git.log
か?
編集StandardOutPath
:およびキーも .plistに追加しようとしましたStandardErrPath
が、そうすると、launchd が何らかの理由で git デーモンを起動できなくなりますが、その理由はわかりません ( にService could not initialize:
for git デーモンが表示されます/var/log/system.log
):
編集: .plist ファイルを編集したところ、デーモンはこの構成で動作します (StandardOutPath、StandardErrorPath も問題を引き起こすようです)。これが機能するものです:
さて、どうすればデーモンのログを次のようなファイルにリダイレクトできます/var/log/git.log
か?
git - コード スタイルの規則に違反するプッシュを確実に拒否する Git の「pre-receive」フックと「git-clang-format」スクリプト
pre-receive
私がすでに書いたフックの断片からすぐに始めましょう:
注:
無関係なコードのある場所は、 でスタブ化されてい# ...
ます。
注:
に慣れていない場合はgit-clang-format
、こちらをご覧ください。
そのフックは期待どおりに機能し、これまでのところバグに気付きませんでしたが、問題を見つけたり、改善の提案があれば、報告をお待ちしています. おそらく、このフックの背後にある意図についてコメントする必要があります。プッシュされたすべてのリビジョンが を使用してコード スタイルの規則に準拠しているgit-clang-format
かどうかをチェックし、準拠していないものがあれば、それぞれに関連する diff (開発者に何を修正する必要があるかを伝えるもの) を出力します。基本的に、このフックに関して 2 つの詳細な質問があります。
まず、リモート (サーバー) のベア リポジトリを一時ディレクトリにコピーし、そこで分析用にコードをチェックアウトしていることに注意してください。その意図を説明しよう。プッシュされたすべてのリビジョンを個別git checkout
に. ここで回避しようとしているのは、リモートの (サーバー) ベア リポジトリへのプッシュ アクセスにおける (可能性のある) 同時実行の問題です。つまり、複数の開発者がこのフックがインストールされたリモートに同時にプッシュしようとすると、これらのプッシュ「セッション」のそれぞれがプライベートコピーでs とs を実行しない場合、問題が発生する可能性があるという印象を受けています。リポジトリの。つまり、簡単に言えば、git reset
for
git-clang-format
pre-receive
git checkout
git reset
git-daemon
同時プッシュ「セッション」のロック管理が組み込まれていますか? 対応するpre-receive
フック インスタンスを厳密に順番に実行しますか、それともインターリーブの可能性がありますか (未定義の動作を引き起こす可能性があります)。この問題には、具体的な保証を備えた組み込みの解決策があるはずだと何かが教えてくれます。そうしないと、リモートは一般的に(複雑なフックがなくても)同時プッシュにさらされてどのように機能しますか?そのような組み込みソリューションがある場合、コピーは冗長であり、ベア リポジトリを再利用するだけで実際に処理が高速化されます。ところで、この質問に関する公式ドキュメントへの参照は大歓迎です。
次に、ステージングされた(コミットされていない) 変更と特定のコミット (デフォルト)git-clang-format
のみを処理します。したがって、コーナーケースがどこにあるかを簡単に確認できます。はい、ルートコミット (リビジョン) と一緒です。実際には、リセット先の親がないため、ルート コミットには適用できません。したがって、2番目の質問に対する次のチェックがあります。HEAD
git reset --soft 'HEAD~1'
試してみましgit update-ref -d 'HEAD'
たが、これによりリポジトリが壊れてしまい、git-clang-format
処理できなくなります。これは、分析されているこれらのプッシュされたリビジョン (このルート リビジョンを含む) のすべてが実際にはまだどのブランチにも属していないという事実に関連していると思います。つまり、切り離され HEAD
た状態です。このコーナー ケースの解決策も見つけて、最初のコミットでもgit-clang-format
コード スタイルの規則に準拠しているかどうかを同じようにチェックできるようにすることができれば完璧です。
平和。
windows - Windows から "git://" リポジトリにプッシュできますか?
私は (Linux マシン上に) レポを持っています。このレポはgit://
プロトコルを使用して公開されています。
Linux マシンからそのレポに正常に複製、フェッチ、およびプッシュできます。
ただし、Windows マシンからは、そのレポからのみ複製およびフェッチできます。
プッシュしようとすると、操作がハングします。git デーモンからの最後のメッセージは
Request receive-pack for '<my_repo_name>'
.
Windows から使用するためのプッシュ可能なgit://
プロトコルはまだ実装されていませんか?