Skip to content

vedantvisoliya/Python-Git-Clone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🐍 pygit

A lightweight, educational reimplementation of Git in Python. This project demonstrates how Git works under the hood by managing commits, branches, trees, and blobs without relying on Git itself.

πŸš€ Getting Started

Clone the Repository

    git clone https://github.com/vedantvisoliya/Python-Git-Clone.git

Run Commands

Use python or python3 prefix depending on your system:

    python main.py <command>

πŸ“– Commands

  1. Initialize Repository
    python main.py init

Creates a .pygit folder containing:

objects/ β†’ Stores Git objects (blobs, commits, trees).

ref/heads/ β†’ Stores branch references.

index β†’ Staging area (dictionary of file paths β†’ SHA-1).

HEAD β†’ Stores current branch.

  1. Add Files
    python main.py add hello.txt # files
    python main.py add . # direcotry
    python main.py add hi.txt index.py go.txt # list of files

Stages files in the index (staging area).

Uses relative paths as keys and SHA-1 hashes as values.

  1. Commit Changes
    python main.py commit -m "message"
    python main.py commit -m "message" --author "Name <email>"

Creates a tree object for the whole directory.

Stores commit with:

commit message
timestamp
author
parent hashes

After committing:

index is cleared (stagging area emptied).

Commit object saved in .pygit/objects/.

  1. Checkout Branch
    python main.py checkout -b newbranch
    python main.py checkout branchname

checkout -b: Creates a new branch under .pygit/ref/heads/branchname.

checkout branchname: Switches branch, rebuilds the directory from the tree hash.

  1. Branch Management
    python main.py branch -b branchname   # Create & switch
    python main.py branch -d branchname   # Delete & move to master
    python main.py branch                 # List all branches
  1. View Commit Logs
    python main.py log

Displays up to 10 commits from current branch:

commit hash

author

  1. Repository Status
    python main.py status

Shows:

Changes to be committed
Unstaged files
Deleted files
Untracked files

πŸ—οΈ Core Concepts

GitObject Class β†’ Base class for Git objects.

Blob β†’ Stores file content.

Tree β†’ Represents directory structure.

Commit β†’ Stores commit metadata.

All objects are stored in .pygit/objects/ and referenced via SHA-1.


🌱 Future Improvements

  1. Garbage collector for unused objects.

  2. Stash functionality.

  3. Merge branches.

  4. Cherry-pick commits.

  5. Checkout a commit (detached HEAD).

  6. Tag support.


🀝 Contributing

Pull requests and feedback are welcome! Open an issue or suggest improvements.


About

(pygit) Recreating Git in python to get a better understanding of how git works under the hood.

Topics

Resources

Stars

Watchers

Forks

Languages