2016-11-24 14 views
-1

最近、ブランチに/という名前のブランチが含まれていると、組織のビルドプロセスが成功しないとわかりました。ルートフォルダ。ブランチ名に特定の文字を使用するときにgitをスローするように設定する

例えば、支店名:DEV/someDev/someBranch

FileName: `<blah>_dev/someDev/someBranch.type` 

支店名が/が含まれているため、実際にはファイル名がsomeBranch.typeであるとRootFolder\<blah>_dev\someDev\で作成されますファイル。 これで、RootFolderでファイルを待っているプロセスは、ビルドプロセスが失敗する原因となるファイルを見つけられません。

したがって、ブランチ名に不正な文字が含まれている場合にエラーをスローするようにgitを構成する方法はありますか?

注:この時点では、ビルドプロセスを変更できません。また、ブランチに名前を付けるいくつかの方法があります:dev-someDev-someBranchこのビルドの失敗を避けることができますが、上記の方法でgitを構成できるかどうか不思議です。

+0

バックスラッシュは、ブランチ名(または参照名)の有効な文字ではありません。 – torek

+0

@torek混乱のために残念ですが、https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.htmlのルール#10を参照してください。私はフォワードスラッシュを意味しました。 – unrealsoul007

答えて

2

さて、あなたは私たちにあなたはブランチ名は、開発者のマシン上のポリシー—に対して、またはビルドサーバが(にフェッチ彼らはにプッシュリポジトリ内またはリポジトリにチェックすることがしたいを教えてくれませんでしたif eny)または他のどこかで完全に。

私はそのようなチェックのためのポイントを構成するのが最も簡単だと思うのは、開発者が彼らの仕事を押し進めるリポジトリです。

このようなポリシー実施を実装するには、そのリポジトリにいわゆるフックを書き込んで有効にする必要があります。具体的にはpre-receiveフックです。

フックは、Gitがリポジトリ上で特定のアクションを実行するときに呼び出すスクリプト(または他の種類の実行可能プログラム)です。概要を読むには、git help hooksを参照してください。各フックは、Gitで動作するためには一定の規則に従わなければなりません。通常、Gitによって供給されたデータを標準入力ストリームから読み込んで、標準出力ストリームに何も書き込まず、ステータスコード0で終了してエラーを出すか(「OKを続行」)ゼロ以外の終了コードを使用します。後者の場合、標準エラーストリームにエラーメッセージを書き込む可能性があります。

関心のフック、このようなpre-receiveロール:

このフックはGitのプッシュがローカルリポジトリで行われたときに が起こるリモートリポジトリ、上のgit - 受信パックによって呼び出される

pre-receive 。 リモートリポジトリの参照の更新を開始する直前に、 pre-receiveフックが呼び出されます。その終了ステータスは、更新の成功または失敗を決定します。

このフックは、受信操作のために1回実行されます。 これは、引数を取りませんが、各refが更新されるのは、標準入力にフォーマットの行を受信します。

<old-value>はREFに格納されている古いオブジェクト名で、 <new-value>は、新しいオブジェクトの名前です
<old-value> SP <new-value> SP <ref-name> LF 

ref と<ref-name>に格納されるのは、refのフルネームです。 新しい参照を作成するときに、<old-value>は40です。

フックがゼロ以外のステータスで終了すると、いずれの参照も更新されません。 フックがゼロで終了する場合、個別の参照の更新は、更新フックによってまだ になる可能性があります。

標準出力と標準エラー出力の両方が反対側の git send-packに転送されるため、単にそのユーザーのメッセージをエコーすることができます。

だから、あなたは2 SP(スペースで区切られた3つのフィールドに、それぞれを破る 、LFで区切らラインのセットとしてそれを解釈し、その標準入力ストリームからデータを読み込み、フックプログラムを書く必要があると思います)文字 を入力して、ブランチ名になる—の第3フィールドを確認してください。—には、ポリシーごとに無効な文字が ありません。

フックが邪悪違反を検出した場合、その標準エラーストリームにメッセージを書き込んで、ゼロ以外の終了コードで終了する必要があります。 これは、Gitがリポジトリをデベロッパー がプッシュしようとしたデータで更新しないようにします。

+1

3番目のフィールドは* reference *の名前になります。 'refs/heads /'で始まる場合に限りブランチ名を指定します。 'refs/tags /'で始まる場合はタグ名です。 'refs/notes /'で始まる場合は 'git notes'からのものです。つまり、これは一般的に正しい答えであり、私はそれを上書きしました:-)しかし、バックスラッシュはすべての参考文献で禁止されていますので、元の質問にはより大きな技術的問題があります。 – torek

+0

そのような有益な答えをありがとう。これはまさに私が探していた関連性と詳細のレベルです。 – unrealsoul007

関連する問題