Cao Yi

Synchronizing a Remote Repository to Local Using Python

Index

The remote Git repository has undergone significant changes. To ensure that the local code aligns with the remote repository, we can employ a script for synchronizing the remote changes to the local repository. This synchronization process ensures that the code in the local repository matches that of the remote repository.

Prerequisites

Before we dive into the code, make sure you have the following:

Implementation

We can implement it following these steps:

  1. Clean the local workspace
  2. Synchronize the remote

Code:

#!/usr/bin/env python3
import git

# Clean the local workspace
def clean_repo(repo):
    repo.git.checkout('--', '.')
    repo.git.reset('--hard')
    repo.git.clean('-df')

# Synchronize local repository to the remote and switch the working branch to the main branch.
def sync_local_repo(repo, main_branch='master'):
    clean_repo(repo)
    
    repo.git.switch(main_branch, '--force')
    branches = [b.name for b in repo.branches]
    # Remove all branches except the main branch
    for branch in branches:
        if branch != main_branch:
            repo.git.branch('-D', branch)
    
    # Remove all local tags
    tags = [t.name for t in repo.tags]
    for tag in tags:
        repo.delete_tag(tag)

    try:
        repo.git.fetch('--all', '--recurse-submodules', '--prune', '--prune-tags', '--force')
        repo.git.checkout(main_branch)
        repo.git.reset('--hard', f'origin/{main_branch}')
        return True
    except Exception as err:
        raise err

# Provide the path to your local repository
repo_path = "/path/to/your/repository"
repo = git.Repo(repo_path)
sync_local_repo(repo)