問題タブ [githooks]
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 - 特定のファイル(* .cpp、*。h、CMakeLists.txtなど)にタブを含むgitへのプッシュを防止します
タブを含むファイルを含むプッシュをリモートリポジトリで拒否したいのですが、ファイルが特定のクラス(ファイル名に基づく)に属している場合に限ります。それは可能ですか?
私はupdate hook
githooksを少し見てきましたが、それは正しいと思います。
つまり、次の場合、プッシュは拒否されます。
- リストされたタイプのファイルがあります(
*.cpp
、、)*.h
CMakeLists.txt
- 1つ以上のタブ文字が含まれています。
git - 更新後フックを使用して別のリポジトリで「git pull」を実行すると、「fatal: not a git repository: '.'」を取得する
私は git を初めて使用するので、ここで用語を誤用した場合はお詫びします (そして訂正してください)。ただし、最善を尽くします。
ベア git リポジトリ (ハブ) と開発サイトの作業コピー (プライム) を Web サーバーにセットアップしようとしています。この記事を参考にパターン化してみました。ハブ リポジトリがプッシュされるたびに、開発作業コピーが更新されるようにします。これの適切なフックは であるという印象を受けています。これはpost-update
次のように作成しました。
アップデート
変更をローカル リポジトリからベア ハブにプッシュすると、更新後のスクリプトから次の出力が得られます。
ただし、ユーザー「サイト」としてサーバーに SSH 接続し、このスクリプトを手動で実行すると、うまく機能します。このフックまたはスクリプトで何が問題になっている可能性がありますか?
git - コミットが存在するかどうかを検証する
指定されたshaのコミットが現在のブランチに存在するかどうかを検証する方法は?
出力を解析する方法はたくさんありますが、ブール値を返す最適な方法が必要です (bash スクリプトで使用するため)。
例えば
git - git サーバーへの単純なマージのプッシュをブロックする
しばらく前に、開発者に をプッシュする前にマージの代わりにリベースを使用するように依頼しました。些細なマージをなくすことで、コミット グラフ (例: gitk、git log) を追跡しやすくなります。
ときどき、うっかりマージしてからプッシュしてしまう人がいます。些細なマージをブロックするサーバー側のフックを作成するための便利な情報やヒントを持っている人はいますか?
「些細なマージ」とは、競合のないマージを意味します。ここに例を示します。これは、git での単純なマージのより良い説明です。
Update Wed Nov 10 01:26:41 UTC 2010 : すばらしいコメント、すべて! ありがとうございました。
- 次のことを考えてみてください。私が皆さんに本当にお願いしているのは、これだけです。
git pull --ff-only
失敗した場合は、git pull --rebase
代わりに行うgit pull
- git.git にはコミッターが 1 人か 2 人しかいませんよね?理論的には、コミット グラフをたどるのは簡単なはずですが、かなり面倒に見えます。
更新 Thu Nov 11 23:49:35 UTC 2010 :
- ここにいくつかの進行中の作業の要点があります
- 別のアイデアは、「git push」ラッパーを使用して、クライアント側での些細なマージを防ぐことです
Update Wed Dec 15 18:34:52 UTC 2010 :
- アディミトラックが近い!ただ 1 つのケースがまだ解決されていません: 重要なマージはまだ機能する必要があります。
- かなり完全なテスト スイートが利用可能です。チェックしてみてください。
- (the?) git mailing listで助けを求めました。
git - コマンドラインからOKですが、フック(git)
誰かがリモート リポジトリにプッシュした後、自分の redmine プロジェクト リポジトリを自動的に更新したいと考えています。現在、redmine の gin は稼働しており、正常に動作しています。しかし、フックを使用した自動更新の後The entry or revision was not found in the repository.
、redmine に入ります。
redime で git をセットアップするために、 redmine wikiに従って、レポはそのままで作成されました。git clone --bare
redmine の git リポジトリを更新するには、これを使用しますcd /srv/www/redmine.domain.com/git_repositories/linode.git && git fetch && git reset --soft refs/remotes/origin/master
git
ユーザーの下でコマンドラインから実行している場合の手動更新は正常に機能します
手動で実行したときのスクリーンショットは
- フォームフックを実行している場合、同じことが正しく機能しません
post-receive
(上記のエラーを参照)。同じユーザー (git) で実行します。フックの最初の行は#!/bin/sh
構成: git (1.7.0.4) + ubuntu の gitolite (1.5.7)
GIT_DIR システム変数 byt command SET remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K remote: GIT_DIR='.'[K
git path
フックにセットしてみました
しかし、何も役に立ちませんでした。
フックの結果
は
calling-git-pull-from-a-git-post-update-hookおよびgit-post-receive-hook-with-git-pull-failed-to-find-a-valid-git-directoryからヒントをいくつか試しましたしかし、何も助けませんでした
アップデート
私が試したら
+ redmine リポジトリは変更されておらず、redmine からアクセスできます
Update2
git fetch
フックから実行してgit reset --soft refs/remotes/origin/master
からコマンドラインから実行すると、機能しないことがわかりました。Redmineで上記のエラーが発生します。git fetch
コマンドラインから行うと、すべて正常に動作します。フックとコマンドラインの「git fetch」コマンドの両方からのコンソール メッセージは、同じように見えます。
git - 複数のサーバーを更新するための git post-receive フック
私はgit post-receive フックを使用して、3 つのサーバー (開発、テスト、および運用) の 3 つのブランチ (マスター、ステージング、および安定) から Web アプリケーションのバージョンをデプロイしています。ブランチとサーバー間のペアリングは、現在スクリプトでハードコーディングされています。しかし、私はこの制限を取り除き、このフックで無制限の数のブランチを管理できるようにしたいと考えています。次の方法で実行できます。
- すべてのブランチごとの設定オプションを別のファイルに移動します。たとえば、
.git/???/<branch_name>
- メインスクリプトは、そのようなファイルがすべてのブランチで利用可能かどうかを確認し、それをソースにして、そのファイルの構成パラメーターを使用してリモートサーバーにデプロイします。
.git
ただし、そのようなファイルをディレクトリのどこに配置できるかは正確にはわかりません。それとも、より良い解決策がありますか?
git - Git グローバル フックのカスタマイズ
ユーザーのアクションをデータベースに記録するプロジェクトとして、いくつかの git フックを作成する予定です。このデータベースは、彼のすべてのアクティビティのクエリに使用できます。私が記録しようとしているアクションは
- 専念
- 引く
- 押す
- マージ
- ブランチ
これを、パッケージ マネージャー経由でインストールできるディストリビューションにパッケージ化したいと考えています。Git は、そのようなものを配置することでグローバルフックを許可します$PREFIX/share/templates/hooks
現在、無効になっているフックがいくつかあります(.sample
名前に が追加されています)。新しいリポジトリが作成されると、これらのフックは.git
リポジトリのフォルダーにコピーされます
ユーザーがこれらのフックとフックのパッケージをインストールするpost-commit
とpost-update
、すでに有効になっています。この場合、スクリプト ファイルは上書きされます。これはまずいですね
これは、git がアクションごとに 1 つのフック ファイルしか持たないことを意味します。1 回のアクションで 3 つのフックを保持する必要がある場合、それは不可能です。これは、パッケージ マネージャーからの自動インストールによって競合が発生する可能性があることを意味します。
ここで、デフォルトで有効になっているファイルを上書きするフックをパッケージ化したとします。ユーザーがこれらのファイルにさらにアクションを追加したい場合、パッケージをアンインストールすることにした場合、カスタム コマンドも削除されますか?
この点でgitはかなり賢いと思っていましたが、間違っていました:(
post-commit
およびまたは任意のアクションという名前のフォルダーが必要でありpost-update
、git はそのフォルダー内のすべてのスクリプトを実行する必要があります。現在の状況に対処する方法を探し続けています。
git - git post-commit フックで、変更されたファイルのリストを取得するにはどうすればよいですか?
Git コミット後のフックでコミットに費やされた時間を把握しようとしています。
コミットに関する API を介して情報を送信するコミット後の git フックがあります。私がやりたいことは、コミットに費やされた時間を把握することです。だいたい。
関連するすべてのファイルの作成時間と変更時間の最小値を見つけ、最大の作成時間と変更時間と比較することで、大まかな値を計算できると思います。
これは、Python スクリプトで簡単に実行できます。「foo.txt」、「bar.txt」、「path/bla.txt」というファイルだと誰かに言われたら、これらのファイルに基づいてスクリプトで簡単に計算を行うことができます。
では、git post-commit フックでは、変更されたファイルのリストを取得するにはどうすればよいでしょうか?
git - 受信後フックを適切に使用するにはどうすればよいですか?
私のディレクトリ構造は次のとおりです。
〜/ parent.git / .git / hooks / post-receive
受信後のフックは次のようになります。
parent.gitにプッシュすると、スクリプトが実行されません。インターネットのあらゆる部分がこれがうまくいくはずだと言っているので、私は問題を理解することができません。
受信後にchmodしたので、それが問題ではないことはわかっています。どんな助けでも大歓迎です。
git - Git タグの作成時に Git フックを自動的に実行する
新しい Git タグが追加されたときに実行できる Git フックはありますか? 新しい Git タグ名を自動的にテキスト ファイルに書き込みたいためです。これを行う方法についての手がかりはありますか?