Skip to content

Instantly share code, notes, and snippets.

@vernetto
Created June 24, 2024 14:21
Show Gist options
  • Save vernetto/b7419096d54b7329c0e0690cb9438fb7 to your computer and use it in GitHub Desktop.
Save vernetto/b7419096d54b7329c0e0690cb9438fb7 to your computer and use it in GitHub Desktop.
python
Yes, you can run `git filter-repo` from a Docker container. Here are the steps to do so:
### Step 1: Pull a Docker Image with Git and Python
First, pull a Docker image that has both Git and Python installed. The official Python image should work well.
```sh
docker pull python:3.9-slim
```
### Step 2: Create and Run a Docker Container
Run a Docker container from the pulled image and mount your local repository into the container.
```sh
docker run -it -v /path/to/your/repo:/repo python:3.9-slim /bin/bash
```
Replace `/path/to/your/repo` with the actual path to your local repository. This command mounts your local repository to `/repo` inside the container and opens a bash shell.
### Step 3: Install `git` and `git-filter-repo` in the Container
Inside the Docker container, install `git` and `git-filter-repo`.
```sh
apt-get update
apt-get install -y git
pip install git-filter-repo
```
### Step 4: Navigate to Your Repository and Filter the Module
Navigate to your repository directory and use `git filter-repo` to filter out the module’s history.
```sh
cd /repo
git filter-repo --subdirectory-filter module-directory
```
### Step 5: Push the Filtered History to the New Repository
Add the new subproject repository as a remote and push the filtered history.
```sh
git remote add subproject https://gitlab.com/your-username/your-subproject-repo.git
git push subproject main
```
### Step 6: Clean Up and Exit
After pushing the changes, you can clean up and exit the Docker container.
```sh
exit
```
### Full Example
Here's the full sequence of commands, assuming `/path/to/your/repo` is the path to your local repository and `module-directory` is the directory you want to filter:
```sh
docker pull python:3.9-slim
docker run -it -v /path/to/your/repo:/repo python:3.9-slim /bin/bash
# Inside the Docker container
apt-get update
apt-get install -y git
pip install git-filter-repo
cd /repo
git filter-repo --subdirectory-filter module-directory
git remote add subproject https://gitlab.com/your-username/your-subproject-repo.git
git push subproject main
exit
```
This process will allow you to filter the Git history of a module and push it to a new GitLab subproject using a Docker container.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment