早送りコミット/ PRマージを許可するようにGitHub(Enterprise)Repoを設定しますか? -- git フィールド と github フィールド と continuous-integration フィールド と pull-request フィールド 関連 問題

Configure github (enterprise) repo to only allow fast forward commits / PR merges?












10
vote

問題

日本語

GerritからGithubに来て、私が行方不明、すなわち早送りのマージだけを許可する。基本的に、私の意見では、古いマスターブランチの変更に登録している場合は、どんな種類の「CIビルドサインオフ」は無用です。

私は、(Enterprise)GitHubでどのように構成できるかについての方法があるかどうか疑問に思いましたか?ブランチが正しく再バージングされていない限り、ユーザーがGitHubの「Merge Pulle Request」ボタンを押すことができない設定またはその他のトリックはありますか?

好ましくは、PRのすべてのコミットを抑制したかどうかを確認する必要があります(そしてそれが1つのコミットしか含まない限り、PRはマージできない)。

だから、完璧な解決策:1つのコミットを持つPRマージのみを許可し、以前に廃棄されました。

英語

Coming from gerrit to github, there's a major feature I'm missing, namely allowing only fast forward merges. Essentially, in my opinion any kind of "CI build sign off" is useless if you're signing off on your change on a stale master branch.

I was wondering if there's any way how this can be configured in (enterprise) github? Is there any setting or other trick that would not allow users to press the "merge pull request" button in github unless the branch was rebased properly?

Preferably, I even would like to add that it should also check whether all commits in the PR were squashed (and the PR can't be merge unless it contains only one commit).

So, perfect solution: Allow only PR merges that have a single commit and were rebased previously.

</div
           
 
 

回答リスト

1
 
vote

この質問にはいくつかの部分があります...

マージ前のターゲットブランチでPRブランチを最新の状態にする必要がある場合は、ブランチ保護ルールを追加できます(リポジトリ "の設定" - &gt; "branches")、「ブランチを使用するマージする前に最新の最新のものです」オプション。現在、このオプションは、ブランチ保護ルールに少なくとも1つの必要なステータスチェックがある場合にのみ使用できます。それはあなたがとにかく必要なステータスチェック(あなたのCI)が必要なので、いつでも常に通過するダミーステータスチェックを書くことができます(私は誰もが再利用できるようなコードがあるかどうかを調べませんでした)。このオプションは少なくともgithub.comで入手できますが、文書化されていると判断したり、GitHub Enterpriseでオプションを探したりすることもテストしていません。

おそらく忙しいプロジェクトでは、ターゲットブランチの最新の立場からテストされるすべてのPRがボトルネックになる可能性があり、ターゲットブランチでのCIの障害を回避することをお勧めします。 この問題の詳細の詳細です。 「REBASEとMERGE」オプションは、真の早送りのマージを実行しますが、PRブランチがすでに最新の場合は、リベースをスキップするのに十分な大きさ(元のコミットIDとコミッター情報を保存する)がテストされていません。ターゲットブランチ

PRブランチにターゲットブランチの上に1つのコミットしかないことを確認したい場合は、カスタムステータスチェックを使用する必要があります。誰かがすでに書いたのかどうかを研究していません。その後、追加のマージコミットなしでこのコミットをマージしたい場合は、[Squash and Merge]オプションまたは[リベースとマージ]オプションを使用します。[Merge Pull Request]ドロップダウンメニュー([スカッシュを許可]リポジトリ設定のマージと「リベースマージを許可する」)。 PRに1つのコミットしか含まれていない場合は、「REBASS」オプションがCOMMIT AS-ISを使用しているのに対し、「Squash」オプションが同じ差分を持つ新しいコミットを使用することです。 i)PR番号とタイトルと(II)著者情報(ユーザーとタイムスタンプ)のみを含むメッセージ(Merge "ボタンをクリックし、元のメッセージと著者情報を破棄します。 (より複雑な履歴を犠牲にしてすべての情報を維持する場合は、「マージコミットの作成」オプションを使用してください。)「マージ前に最新のブランチを必要」オプションを必要とする必要があります。それ以外の場合はgithubはあなたが望むテストを実行するように促さずにターゲットブランチの上に喜んでストールコミットを置きます。

分岐保護規則の「リニア履歴を必要とする」オプションは、「マージコミットを一致するブランチにプッシュされるのを防ぐ」という文書化されています。しかし、それ以外は研究していません GitHub BlocksがPRマージの手動プッシュ(例えば、リポジトリ設定で無効にする "Merge"ボタンオプションに対応する形式でプッシュするかどうか。

誰かが私が知らないと言ったことのいずれかに対する答えを知っているなら(またはその問題のために他の修正または重要な関連したものはこの答えに編集または重要な要点を持っています)、答えを編集してください!

 

There are a few parts to this question...

To require that a PR branch be up to date with the target branch before merging, you can add a branch protection rule (go to the repository "Settings" -> "Branches") and use the "Require branches to be up to date before merging" option. Currently, this option is only available if the branch protection rule has at least one required status check; it sounds like there may a status check you want to require anyway (your CI), but you can always write a dummy status check that always passes (I have not researched whether anyone has code for this that you can reuse). This option is available at least on github.com, but I have not tested that it behaves as documented, nor have I looked for the option on GitHub Enterprise.

It's probably worth mentioning that on a busy project, requiring every PR to be tested against the latest position of the target branch may become a bottleneck and you may wish to consider a different compromise between velocity and avoiding CI failures on the target branch, as discussed in the later part of this thread.

The default merge method ("Create a merge commit" in the drop-down menu of the "Merge pull request" button, which is available only if "Allow merge commits" is on in the repository settings) always creates a merge commit even if the target branch is an ancestor of the PR branch. This can be helpful in that the merge commit records the PR number and title and the user and timestamp of the merge while preserving the original commit(s) from the PR branch. So in combination with the "Require branches to be up to date before merging" option, this is not technically a "fast-forward merge" but could be called a "dummy merge commit based on a fast-forward branch". Here is more discussion of this issue. The "Rebase and merge" option would perform a true fast-forward merge, but I haven't tested whether it's smart enough to skip the rebase (preserving the original commit IDs and committer information) if the PR branch is already up to date with the target branch.

If you want to ensure that the PR branch has only a single commit on top of the target branch, you'd have to use a custom status check; I haven't researched whether someone has already written one. Then if you want to merge this commit without an additional merge commit, you would use either the "Squash and merge" option or the "Rebase and merge" option in the "Merge pull request" drop-down menu (corresponding to "Allow squash merging" and "Allow rebase merging" in the repository settings). In the case that the PR contains only one commit, I believe the only difference between these two options is that the "Rebase" option uses the commit as-is, while the "Squash" option uses a new commit with the same diff but (i) a message containing only the PR number and title and (ii) author information (user and timestamp) based on the click of the "Merge" button, discarding the original message and author information. (If you want to keep all of the information at the expense of a more complex history, use the "Create a merge commit" option.) You still need the "Require branches to be up to date before merging" option, otherwise GitHub will happily put stale commit(s) on top of the target branch without prompting you to perform the testing you want.

The "Require linear history" option in a branch protection rule is documented to "Prevent merge commits from being pushed to matching branches". But other than that, I haven't researched whether GitHub blocks manual pushes (e.g., from the command line) of a PR merge in a form that corresponds to a "Merge" button option that is disabled in the repository settings.

If anyone knows the answer to any of the things I said I don't know (or for that matter, has any other corrections or important related points to this answer), please edit the answer!

</div
 
 
 
 
-1
 
vote

git configファイルに早送りするだけのコマンドを追加できると思います。これは、ローカル(すなわち、リポジトリ固有の)git configファイルまたはあなたのグローバルgit configファイルでこれを行うことができます。

あなたのローカルgit configファイルを修正するには、(Gitリポジトリ内から)次のように入力します。

<コード> inExternalFilesDir()0

またはそれをグローバルにするために、すなわちあなたの機械のすべてのgitプロジェクトに適用

<コード> inExternalFilesDir()1

上記のコマンドを実行した結果は、GIT Configファイルに次のようなものが追加されたことです(したがって、もちろん手動で追加することができます)

<コード> inExternalFilesDir()2

グローバルGIT Configファイルは通常 inExternalFilesDir()3 に位置し、リポジトリ固有のgit configファイルは通常 inExternalFilesDir()4 にあります。

実際に試してみませんでした。うまくいかないか、あなたのために機能しないかどうか私に知らせてください。

あなたが1つのコミットを強制する方法がわからない。私はあなたが記述したもの、早送りしか早く、たった1のコミットをした場所に働いていました。あなたは素晴らしい線形史を果たしていますが、特に開発者のチームのために、それは本当に遅く開発を遅くします2よりわずかに柔軟なアプローチは、人々に次のことをするように頼むかもしれません。

あなたの開発ブランチから(リベースが履歴を同期させたので力が必要です)。 <コード> inExternalFilesDir()5

テストが経過したことを確認してから:

<コード> inExternalFilesDir()6

マスターをマスターに渡したい場合はマージャーにタグを付けることもできます、すなわち以下のようにしてください。

<コード> inExternalFilesDir()7

 

I think that you can add a command to your git config file that enforces fast forward only. You can do this on your local (i.e. repository specific) git config file or your global git config file.

To amend your local git config file, type the following into your terminal (from within the git repository):

git config --add branch.master.mergeoptions --ff-only

or to make it global, i.e. apply to all git projects on your machine

git config --global --add branch.master.mergeoptions --ff-only

The result of running the above commands is that the following gets added to your git config file (so you could of course just add this manually)

[branch "master"] mergeoptions = --ff-only

The global git config file is usually located at ~/.gitconfig and the repository specific git config file is usually located at name_of_repo/.git/config.

I haven't actually tried it out. Let me know if it works or doesn't work for you.

I'm not sure how you can enforce just one commit. I have worked a place which did just what you describe, fast forward only and just 1 commit. You end up with a nice linear history but it really slows down development, especially for teams of developers larger than 2. A slightly more flexible approach might be to ask people to do the following.

From your development branch (the force is needed as the rebase puts the history out of sync): git pull git rebase origin/master git push --force

Verify that your tests have passed and then:

git checkout master git merge <name_of_branch> --squash git push

You can also tag the merge into master if you like to give a version to each commit to master, i.e. do the following as well:

git tag <tag_number> git push --tag

</div
 
 
-1
 
vote

<コード> Settings -> Options へのナビゲート Merge button

というセクションがあります。
  1. ffコミットを許可するための Allow merge commits のチェックを外します。

  2. Allow rebase merging をマージに強制するための。

  3. href="https://i.stack.imgur.com/b5kwm.png" rel="nofollow noreferrer"> イメージの説明を入力しますここで

    線形コミット履歴を必要とする

 

Navigate to Settings -> Options there is a section called Merge button

  1. Uncheck Allow merge commits to only allow ff commits.

  2. Uncheck Allow rebase merging to force squashing on merge.

enter image description here

You could also require a linear commit history

</div
 
 

関連する質問

0  プル要求のベースブランチを変更し、マージされたコミットを除く  ( Change base branch of pull request and exclude merged commits ) 
現在マスターブランチに由来するプル要求を持っており、その基本をマスターの後ろに2つのコミットされているブランチに変更したいです。 GitHub Enterpriseのベースブランチを変更すると、マスターにはない2つのコミットもプル要求にドラッグされます。 ベ...

47  * githubアカウントなしでプルリクエストを作成する方法*  ( How to make pull requests without a github account ) 
gitの目標の1つは分散化されるべきです。 Githubが... GITのハブである場合は、 ハブがあることを考慮に入れることができ、ではないGit URLでプル要求が発生することができます。 GitHubでホストされています。 Documentati...

476  他のフォークから私のフォークへの中身の除去されていないアップストリームプル要求を適用する方法  ( How to apply unmerged upstream pull requests from other forks into my fork ) 
githubのプロジェクトは、私が著者がまだ引っ張られていないことを私のフォークに引っ込めたい新しいプル要求を持っています。 他のフォークからのプル要求をフォークに適用する簡単な方法はありますか?ここに私が行方不明になっているのは他に何かありますか? ...

0  vnextのプルリクエストビルド中にマージターゲットブランチを推測する方法  ( How to deduce the merge target branch during the pull request build in vnext ) 
TFSバージョンコントロールからGIT(TFSによってホストされている)にコードを移行するプロセスにあります。移行の一部は、プル要求ビルドを設定しています。 TFS VNEXT CIフレームワークを使用します。 そしてそれが作業している、プル要求が作成さ...

0  Github Pull Request APIの合成性チェック  ( Github pull request api mergeability check ) 
GitHub Pull Request APIが null として取得可能な属性を返すことに気付いた。このドキュメントにまたがって見てみました。プル要求のGithub Mergeabilityの確認。 しかし、それはどれだけの頻度でポーリングを続けるべきかは...

1  Azure DevOpsはプルリクエストの競合を解決します  ( Azure devops resolve pull request conflict ) 
だから、私はAzureに非常に奇妙な問題を抱えています。 プル要求では、それはいくつかの競合を検出していますが、それらがどこにあるのか、そして私が変更する必要があるのか​​を示しません。 その前に、Visual Studioは 21:34:58.3420 フォ...

10  Github Pull Requestコードのレビューの後にきれいな履歴を保存する方法  ( How to keep a clean history after github pull request code review ) 
私たちのコードはgithubにあり、私たちはコードを確認するためにプル要求を使います。レビューの結果、コミットが元に戻されるか変更される可能性があります。これはコミット履歴を乱雑にするかもしれません。 rebase コマンドは、コミットがすでに「公に利用可能...

281  最新のコミットだけのためにGitHubでプル要求を送る  ( Send a pull request on github for only latest commit ) 
GitHubでプロジェクトを分岐し、地元のマスターへの変更を成功させ、GitHubの原産地に推進しています。プル要求を送信したいのですが、最後のコミットを含めたいだけです。 github.comのプルリクエストUIは最後の9のコミットを示しています、そして私...

14  Githubフォークのソースを変更する方法  ( How to change the source of a github fork ) 
ソースAからgithubでプロジェクトを分岐した。それ以来、標準的な慣行は、PULL要求をAに発行することですが、Bにはプル要求を手動で指定する必要があります。少し面倒です。 私のフォークの原因を恒久的に変更する方法はありますか? ...

0  Jenkins:「Jenkinsの管理」>「システムの設定」への資格情報を制限する  ( Jenkins limit credentials to manage jenkins configure system ) 
ジェンキンスでGitHub Pull Request Builderプラグインを使用しますが、このプラグインを使用するには、「Jenkins&GTの管理」の資格情報を入力する必要があります。特定のGitHub Enterprise Serverへのアクセスを提...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有