A lightweight version of Git-like local Version Control System
Project description
GitLite
A lightweight implementation of Git-like local version control system built from scratch in Python, designed to provide deeper understanding of Git's internal workings. Its core functionality revolves around staging and committing files, managing branches, and tracking file changes using SHA-1 hashes.
For more in-depth details on internal working of a version control system, checkout this blog.
Available features and Usage
Install python package
$ pip install gitlite
OR
$ pip install gitlite==0.3.1
gitlite init
Initializes an empty gitlite repository
$ gitlite init
gitlite add
Add files for staging
$ gitlite add <file-name1> <file-name2>
gitlite status
View status of the working directory, including staged, modified, and untracked files.
$ gitlite status
gitlite commit
Creates a snapshot of the repository, storing metadata like timestamps, commit messages, and tree hashes.
-m: Commit message-a/--amend: Amend to previous commit
$ gitlite commit -m <commit-message>
Amend to previous commit
$ gitlite commit -a <new-commit-message>
gitlite branch
View, create and modify branches
branch_name: Create new branch-m: Rename current branch-d: Delete a branch (other than current branch)
View all branches
$ gitlite branch
Create a branch
$ gitlite branch <branch-name>
Rename a branch
$ gitlite branch -m <new-branch-name>
OR
$ gitlite branch -m <old-branch-name> <new-branch-name>
Delete a branch (other than current branch)
$ gitlite branch -d <branch-name>
gitlite checkout
Switch between branches
branch_name: Checkout to a new branch-b: Create new branch and checkout to that branch
$ gitlite checkout <branch-name>
Create a new branch and checkout
$ gitlite checkout -b <new-branch-name>
gitlite log
View commit history of current branch
branch_name: View commit history of a particular branch
$ gitlite log <branch-name>
Current branch logs
$ gitlite log
.gitignore Support
Implements .gitignore parsing to exclude specified files from tracking.
Further help
$ gitlite --help
Architecture:
The system utilizes a tree-based structure to represent the file system, with TreeItem objects as nodes. CommitObject instances represent commits, linked to their parent commits and associated tree objects. An index file tracks the staging area. Utility functions provide core operations like SHA-1 hashing, file system traversal, and .gitignore handling.
Technologies Used:
- Python: The primary programming language.
- SHA-1: For file hashing and identifying changes in within the file system tree.
enummodule: For type-safe file type representation (FileType).
Purpose:
The project aims to provide a simplified, educational implementation of core Git concepts, focusing on staging, committing, and branching.
Potential Improvements
Support for following git commands:
merge: Merge one branch to anotherrebase: Change the base of current branchclone: Clone a remote repositorypush: Push changes to a remote repositorypull: Pull changes from a remote repository
Remote Repository Support
Implement the ability to interact with remote repositories (e.g., fetching, pushing). This is a significant undertaking but would greatly enhance GitLite's functionality.
Configuration Management
Implement a more robust configuration management system. This would allow users to customize GitLite's behavior, such as:
- User Information: Store user name and email address.
- Core Settings: Store core GitLite settings (e.g., editor, merge tool).
- Repository-Specific Settings: Store settings specific to a particular repository.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gitlite-0.3.5.tar.gz.
File metadata
- Download URL: gitlite-0.3.5.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57c59d4a027666fd958947de045ed08aed5c531dfbf0dfe74765aa92bc6662c9
|
|
| MD5 |
6ced4e1ad8d0ed75add7788bd3e11174
|
|
| BLAKE2b-256 |
04a50c5e2211866ee7214c95c43558504ce5465138c48f65d96f935415269368
|
File details
Details for the file gitlite-0.3.5-py3-none-any.whl.
File metadata
- Download URL: gitlite-0.3.5-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bfaa04ddbb2867fa364635997b1425c911e4574bf8e963d60cc9792f660e060
|
|
| MD5 |
9d40819c4b66ad5c3f5e920187742950
|
|
| BLAKE2b-256 |
0efb7d203aff93e70c0f379490618b2af4b48167adff2f2db3a184abd15e152a
|