How to remove a git branch in a dist-git repository
Historically we did not allow to remove git branches in dist-git repository, but FESCo recently approved their removal if and only if all the commits in the branch to be deleted can be reached from another branch. This is a requirement to ensure that if any of the commits were used in a build, we still have the commit accessible and thus we are able to reproduce the build if needed.
There is a script in the releng repository to use to check if a branch can safely be deleted.
So here are the steps to follow to remove the branch <branch> from the package
<foo>.
-
Clone the releng repo if you do not already have it:
git clone https://forge.fedoraproject.org/releng/tooling.git
-
Pull the latest changes:
pushd tooling && git pull --rebase && popd
-
Clone the
<foo>package locally:fedpkg clone <foo>
-
Run the unused-branch check script from your clone of the
toolingrepository (see above). The script must be invoked differently depending on whether you are in a normal working tree or in a bare repository (similar to the layout on pkgs servers or when simulating a releng environment).-
In a normal
fedpkgworking tree, change to the package directory and pass the remote branch ref with theorigin/prefix. The following assumes yourtoolingclone sits next to the package directory; adjust the path todistgit_branch_unused.pyif your layout differs.cd <foo> git checkout <branch> python ../tooling/packages/distgit/distgit_branch_unused.py origin/<branch>
-
In a bare clone, pass
--package=<foo>and the short branch name (without theorigin/prefix):git clone --bare https://src.fedoraproject.org/<namespace>/<foo>.git <foo>.bare cd <foo>.bare python ../tooling/packages/distgit/distgit_branch_unused.py --package=<foo> <branch>
(If needed, see the
--helpof the script for more information.)
-
-
If the script returns that the branch is safe to delete:
-
Go to pkgs01 as root
ssh pkgs01.rdu3.fedoraproject.org
-
Go to the git repository:
cd /srv/git/repositories/<namespace>/<foo>.git
-
Move the head of the branch (this allows to recover it later if needed):
mv refs/heads/<branch> heads_<branch>
Sometimes the ref is in the
packed-refsfile, in that case:grep <branch> packed-refs > heads_<branch>
Then remove the line from
packed-refsfile
-
-
On your local clone of
<foo>, check that the branch was deleted upstream:git fetch -p
This should show something like:
$ git fetch -p From ssh://pkgs.fedoraproject.org/<namespace>/<foo> - [deleted] (none) -> origin/<branch>
Want to help? Learn how to contribute to Fedora Docs ›