Question
I have a private GitLab repository that I want to make public, but some of the people who have worked on it don’t want their names/GitLab accounts to be visible there. I wanted to scrub their names, then, and I heard about git filter-repo as the “state of the art” for doing it, so to speak.
As I understood it, I have to update my local copy and then push it to a new repo, so that any comments/merge requests/etc they made to the GitLab project (as opposed to just the repo’s commit history itself) would also be gone. However, I’m using git LFS—the project contains a number of image files, Photoshop files, etc—and I have enough of them stored that they go beyond the free storage available on GitLab and I needed to buy extra.
How do I deal with that? It seems like trying to push to a new repo won’t work, because LFS tries to re-upload the files to the new repo rather than just having references to the old files. Will I need to buy extra storage for the new repo and then upload? How do I do it?
(Also, it’s possible I was doing it all wrong; I wasn’t 100% comfortable with my understanding of how filter-repo works. I’d appreciate a more step-by-step answer with the right commands and so on if possible!)
Answer
To make your private GitLab repository public while scrubbing certain contributors’ names from the commit history and dealing with Git LFS, follow these comprehensive steps. This process includes using git filter-repo
for the history rewrite and managing Git LFS storage effectively.
Detailed Description
When you want to make a private GitLab repository public, you need to ensure that all sensitive information, such as contributors’ names and email addresses, is removed from the commit history. Additionally, managing large files with Git LFS requires special attention to storage constraints. Here’s a step-by-step guide to achieve this:
Step 1: Clone Your Repository
First, clone your private repository locally if you haven’t already:
git clone --mirror https://gitlab.com/your-username/your-private-repo.git cd your-private-repo.git
Cloning with --mirror
is important because it includes all refs and the complete repository history.
Step 2: Install git filter-repo
Make sure you have git filter-repo
installed. You can install it using pip
:
pip install git-filter-repo
Step 3: Rewrite History
Use git filter-repo
to remove or modify the authors’ information. Create a mapping file for the authors you want to scrub:
[email protected] <[email protected]> New Name [email protected] <[email protected]> Another New Name
Run git filter-repo
with the author mapping:
git filter-repo --mailmap my-mailmap.txt
Step 4: Verify the Changes
After running the filter-repo command, check the repository’s history to ensure the changes were made correctly:
git log --all --format='%aN <%aE>'
This command lists all author names and emails in the repository.
Step 5: Create a New Repository on GitLab
Create a new repository on GitLab where you will push the modified history. Note down the new repository URL.
Step 6: Push to the New Repository
To handle Git LFS files, you’ll need to re-upload them to the new repository. Follow these steps:
- Configure Git LFS: Ensure Git LFS is initialized and configured for the new repository.
git lfs install git lfs track "*.psd"
Make sure you replace *.psd
with the appropriate file types used in your repository.
- Push to the New Repository:
git remote add new-origin https://gitlab.com/your-username/your-new-repo.git git push new-origin --mirror
This command pushes all branches, tags, and LFS objects to the new repository. If you have a large number of LFS objects, ensure that you have enough storage available in the new repository. GitLab may require you to purchase additional storage space if the free quota is exceeded.
Step 7: Verify LFS Objects
After pushing, verify that the LFS objects are correctly uploaded:
git lfs ls-files
Ensure that the files are listed correctly in the new repository.
Step 8: Make the Repository Public
Once you have confirmed that the repository, including the commit history and LFS objects, is correctly uploaded and verified, you can change the repository’s visibility to public on GitLab:
- Go to your new repository on GitLab.
- Navigate to
Settings
>General
. - Under
Visibility, project features, permissions
, setProject visibility
toPublic
. - Save the changes.
Conclusion
By following these steps, you can successfully make your GitLab repository public while scrubbing sensitive information and managing Git LFS objects effectively. This ensures that the contributors’ privacy is maintained, and the repository history is clean and ready for public access.