Skip to content
/ Chrono Public

A git time machine, it automatically commits in a temporary branch every time a costumizable event occurs, so that rolling-back to a specific point in time is always possible if anything goes wrong.

License

Notifications You must be signed in to change notification settings

hazyuun/Chrono

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chrono

A Git Time Machine

Build GitHub go.mod Go version GitHub

Chrono automatically commits in a temporary branch every time a costumizable event occurs.

So that you can always rollback to a specific point in time if anything goes wrong.

You can squash merge all the temporary commits into one once you are done.


Disclaimer

This is still in early development stages.

If you are going to use it or test it, please use with caution.

Use at your own risk, I am NOT responsible for any of your acts.

How to install

git clone https://github.com/hazyuun/Chrono.git
cd Chrono
go install .

Make sure you have go installed, if not, you can easily install it using your package manager

The binary will be installed into ~/go/bin/ by default, make sure it is in your PATH environment variable, if not, you can add it using:

export PATH="$HOME/go/bin/:$PATH"

Note that this will add ~/go/bin/ to PATH just for the current terminal session, you can add that line to your ~/.profile for a permanent effect.

Now you can run the following command to check if it is installed correctly:

chrono --help

Workflow

Create a chrono session

Create a new session using:

$ chrono session create session_name

Important: Please note that this will create a branch from the current HEAD, so make sure it is currently in the commit where you want to create the chrono session.

You can create as many sessions as you want, to list existing sessions you can run the following command:

$ chrono session list

Start a Chrono session

Start a Chrono session using:

$ chrono session start session_name

From now on, Chrono will be automatically committing changes to the session's specific branch whenever an event occurs.

Important: Please note that after you stop running this command, you will still be in the session branch for convinience.

Events are customizable using a chrono.yaml file (see below for details).


Merging and deleting the session

Using chrono

When done, you can merge the Chrono branch to your original branch

$ chrono session merge session_name "Commit message"

Then if everything is as expected, you can delete the session:

$ chrono session delete session_name

Manually

You can also merge manually (A squash merge is recommended) the Chrono branch to your original branch (let's call it original_branch):

$ git checkout original_branch
$ git merge --squash chrono/session_name

Then if everything is as expected, you can commit the merge:

$ git commit -m "Your commit message"

...and delete the session:

$ chrono session delete session_name

Config file

Put a file named chrono.yml in the root of your repository.

Here is an example config file:

# Events when to automatically commit
events:
    # This triggers every amount of minutes
    - periodic:

        # Every 60 seconds
        period: 60

        # Commit those files
        files: ["src/", "file.txt"] 

    # This triggers every file save
    - save:

        # Those files will be committed once they're saved
        files: ["notes.txt"]
        
        # Use files: ["."] if you want all files inside the current directory to be commited (Not recursively, files inside subdirectories won't be committed)
git:
    # When true, untracked files will automatically be added
    auto-add: true

If you want to exclude some files when using files: ["."], just use your regular .gitignore file.


Contributions

Pull requests and issues are welcome !

About

A git time machine, it automatically commits in a temporary branch every time a costumizable event occurs, so that rolling-back to a specific point in time is always possible if anything goes wrong.

Topics

Resources

License

Stars

Watchers

Forks

Languages