vcs:gitworkflow

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
vcs:gitworkflow [2021/03/29 10:54] – Changed git.php.net to GitHub sergeyvcs:gitworkflow [2023/08/31 08:55] (current) – Add --atomic flag ilutov
Line 6: Line 6:
  
 We will use release branches for the php-src.git repository. We will have branches for actively maintained We will use release branches for the php-src.git repository. We will have branches for actively maintained
-versions. For example: **7.2**, **7.3**, **7.4**, **8.0** and **master**. A patch will be applied to the oldest possible branch. +versions. For example: **7.4**, **8.0**, **8.1** and **master**. A patch will be applied to the oldest possible branch. 
-If the Release Manager of 5.accepts the change, commit it to the 5.branch. We will use regular merging between the release branches.+If the Release Manager of 7.accepts the change, commit it to the 7.branch. We will use regular merging between the release branches.
 Bigger features can use feature branches, but developers are encouraged to fork php on github and start implementing the Bigger features can use feature branches, but developers are encouraged to fork php on github and start implementing the
 feature there on the respective branch. feature there on the respective branch.
Line 24: Line 24:
  
 ==== Initial Setup ==== ==== Initial Setup ====
- 
-First, go to ''https://master.php.net/manage/users.php?username=YOUR_PHP_NET_USERNAME'' and add your SSH public key. Then: 
  
   $ git clone git@github.com:php/php-src.git   $ git clone git@github.com:php/php-src.git
Line 37: Line 35:
 ==== Patching a release branch ==== ==== Patching a release branch ====
  
-Patching the PHP 7.branch:+Patching the PHP 7.branch:
  
-  $ git checkout PHP-7.2+  $ git checkout PHP-7.4
   ... hack hack ...   ... hack hack ...
   $ git commit <changed files>   $ git commit <changed files>
   ... USE A GOOD COMMIT MESSAGE ...   ... USE A GOOD COMMIT MESSAGE ...
-  ... run tests ... 
-  $ git checkout PHP-7.3 
-  $ git merge PHP-7.2 
-  ... run tests ... 
-  $ git checkout PHP-7.4 
-  $ git merge PHP-7.3 
   ... run tests ...   ... run tests ...
   $ git checkout PHP-8.0   $ git checkout PHP-8.0
   $ git merge PHP-7.4   $ git merge PHP-7.4
   ... run tests ...   ... run tests ...
-  $ git checkout master+  $ git checkout PHP-8.1
   $ git merge PHP-8.0   $ git merge PHP-8.0
 +  ... run tests ...
 +  $ git checkout PHP-8.2
 +  $ git merge PHP-8.1
 +  ... run tests ...
 +  $ git checkout master
 +  $ git merge PHP-8.2
   ... run tests ...   ... run tests ...
   $ gitk master   $ gitk master
   ... review the merges ...   ... review the merges ...
-  $ git push origin PHP-7.PHP-7.PHP-7.PHP-8.master+  $ git push --atomic origin PHP-7.PHP-8.PHP-8.PHP-8.master
   ... push to the official repository ...   ... push to the official repository ...
      
 When you use 'git push --all origin', make sure there are not any unwanted branches in local repository or set branch.<name>.remote properly via git-config. When you use 'git push --all origin', make sure there are not any unwanted branches in local repository or set branch.<name>.remote properly via git-config.
 +
 +Use the '--atomic' flag to ensure that no refs are updated if the update of any of them fails.
  
 ==== Reviewing and closing pull requests ==== ==== Reviewing and closing pull requests ====
Line 71: Line 71:
 ==== Merge a pull request ==== ==== Merge a pull request ====
  
-Preferably, pull requests should not be merged, but rebased onto the target branch. Because it is common that PRs need to be applied to a different branch than the one it was originally created for, the easiest way to do this is using ''git am''. Patches for use by ''git am'' can be obtained by appending ''.patch'' to the GitHub URL. For example, to apply pull request #1234 onto branch PHP-7.2:+Preferably, pull requests should not be merged, but rebased onto the target branch. Because it is common that PRs need to be applied to a different branch than the one it was originally created for, the easiest way to do this is using ''git am''. Patches for use by ''git am'' can be obtained by appending ''.patch'' to the GitHub URL. For example, to apply pull request #1234 onto branch PHP-7.4:
  
-  $ git checkout PHP-7.2+  $ git checkout PHP-7.4
   $ wget https://github.com/php/php-src/pull/1234.patch   $ wget https://github.com/php/php-src/pull/1234.patch
   $ git am -3 1234.patch   $ git am -3 1234.patch
Line 80: Line 80:
   $ make test                     $ make test                  
   .. you better not forget that ...   .. you better not forget that ...
-  $ git checkout PHP-7.3 
-  $ git merge PHP-7.2 
-  $ make test 
-  $ git checkout PHP-7.4 
-  $ git merge PHP-7.3 
-  $ make test 
   $ git checkout PHP-8.0   $ git checkout PHP-8.0
   $ git merge PHP-7.4   $ git merge PHP-7.4
   $ make test   $ make test
-  $ git checkout master+  $ git checkout PHP-8.1
   $ git merge PHP-8.0   $ git merge PHP-8.0
   $ make test   $ make test
-  $ git push origin PHP-7.PHP-7.PHP-7.PHP-8.master     +  $ git checkout master 
 +  $ git merge PHP-8.
 +  $ make test 
 +  $ git push origin PHP-7.PHP-8.PHP-8.master     
  
 Additionally, the history of pull requests often requires cleanup. For most pull requests, all commits can be squashed into one. Additionally, the history of pull requests often requires cleanup. For most pull requests, all commits can be squashed into one.
      
 === Note about moving patches from a newer branch === === Note about moving patches from a newer branch ===
-In case you have to merge a commit from a higher branch. E.g from PHP-7.into PHP-7.make sure you still merge upwards+In case you have to merge a commit from a higher branch. E.g from PHP-8.into PHP-7.make sure you still merge upwards
 as described above afterward: as described above afterward:
  
-  $ git checkout PHP-7.2 
-  $ git cherry-pick <SHA1-OF-PATCH-TO-MOVE> 
-  $ git checkout PHP-7.3 
-  $ git merge PHP-7.2 
   $ git checkout PHP-7.4   $ git checkout PHP-7.4
-  $ git merge PHP-7.3+  $ git cherry-pick <SHA1-OF-PATCH-TO-MOVE>
   $ git checkout PHP-8.0   $ git checkout PHP-8.0
   $ git merge PHP-7.4   $ git merge PHP-7.4
-  $ git checkout master+  $ git checkout PHP-8.1
   $ git merge PHP-8.0   $ git merge PHP-8.0
 +  $ git checkout master
 +  $ git merge PHP-8.1
   $ git push   $ git push
  
-**TL;DR: Always try to merge PHP-7.into PHP-7.3, then PHP-7.4, then PHP-8.0, and then into master.**+**TL;DR: Always try to merge PHP-7.into PHP-8.0, then PHP-8.1, and then into master.**
  
 ==== Merge patches received per mail ==== ==== Merge patches received per mail ====
Line 156: Line 151:
   $ git remote add upstream https://github.com/php/php-src.git   $ git remote add upstream https://github.com/php/php-src.git
   $ git fetch upstream   $ git fetch upstream
-  $ git branch --track issue-<issuenr> origin/PHP-7.  (or use origin/master)+  $ git branch --track issue-<issuenr> origin/PHP-7.  (or use origin/master)
   $ git checkout issue-<issuenr>    $ git checkout issue-<issuenr> 
  
 Do your stuff and add/commit your work accordingly. Do your stuff and add/commit your work accordingly.
 Optionally, you can rebase your work: Optionally, you can rebase your work:
-  $ git pull --rebase upstream PHP-7.   (or use upstream master)+  $ git pull --rebase upstream PHP-7.   (or use upstream master)
 Push your branch to your github repository: Push your branch to your github repository:
   $ git push origin issue-<issuenr>   $ git push origin issue-<issuenr>
Line 178: Line 173:
 If you prefer mail use git format-patch and send the created patch using mail: If you prefer mail use git format-patch and send the created patch using mail:
  
-  $ git format-patch origin/PHP-7.2+  $ git format-patch origin/PHP-7.4
   0001-bug-fix.patch   0001-bug-fix.patch
   ...    ... 
Line 187: Line 182:
      
 If you don't have an issue-number, just make the branch name self-descriptive (ie: "json_encoding_fix" instead of "branch-001").  If you don't have an issue-number, just make the branch name self-descriptive (ie: "json_encoding_fix" instead of "branch-001"). 
-As stated before, branch from the lowest version possible. When you want to create a patch that needs to be incorporated into several branches, like a security fix for something in PHP-7.1, PHP-7.2, PHP-7.3PHP-7.4, PHP-8.0 and the master, make sure you checkout a branch from PHP-7.1. You don't need to create separate pull requests for PHP-7.2, PHP-7.3, PHP-7.4PHP-8.0 and master.+As stated before, branch from the lowest version possible. When you want to create a patch that needs to be incorporated into several branches, like a security fix for something in PHP-7.4, PHP-8.0, PHP-8.1, and the master, make sure you checkout a branch from PHP-7.4. You don't need to create separate pull requests for PHP-7.4, PHP-8.0, PHP-8.1, and master.
  
  
vcs/gitworkflow.1617015257.txt.gz · Last modified: 2021/03/29 10:54 by sergey