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://pagure.io/releng.git
-
Pull the latest changes:
pushd releng && git pull --rebase && popd
-
Clone the
<foo>
package locally:fedpkg clone <foo>
-
Checkout the <branch> branch:
cd clone && git checkout <branch>
-
Run the script:
python ../releng/scripts/distgit-branch-unused.py <branch>
(If needed, see the
--help
of the script for more information) -
If the script returns that the branch is safe to delete:
-
Go to pkgs01 as root
ssh pkgs01.iad2.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-refs
file, in that case:grep <branch> packed-refs > heads_<branch>
Then remove the line from
packed-refs
file
-
-
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 ›