Per-session checkpoint using git-stash-create
Project description
PSCP: Per-session checkpoint
PSCP is a brand-new way to make checkpoint in git repository efficiently.
By logging the hash output by pscp.create()
, you can git diff
, git stash branch
and git checkout
using them whenever you want.
PSCP is framework-agnostic, so can be used in any git repository.
PSCP inherits all strengths from git, which are very useful for study.
- Recycle unchanged objects
- Compression (zlib)
- Show differences using
git diff a..b
- Checkout to, using
git checkout
- Create branch from, using
git stash branch
. This restores staged files staged and unstaged files unstaged.
Besides, PSCP does make neither git log
nor git stash list
messy. You won't suffer from trivial tuning commits and too many stashes.
Requirements
- python 3.5+
- git
Installation
pip install pscp
Getting Started (with tensorboardX)
Frequently Asked Questions
How does it work?
Tracking New Files
Use git add
to stage, to track new files. Untracked files will not be added to the checkpoint.
Saving environment variables or argparse results?
You're supposed to write to any file and track them (using git add
).
Using json built-in library, it can be done easily.
import json
To save environment variables,
import os
json.dump(fp, dict(os.environ), indent=4)
To save argparse namespace,
json.dump(fp, vars(args), indent=4)
Any other data can be saved in same way.
Command Line Tool (TODO)
python -m pscp
pscp.create(return_head_on_nothing=True, return_format='abbrev', link=True)
Create per-session checkpoint.
return_head_on_nothing
: If True, return hash ofHEAD
when there are nothing changed compared toHEAD
, otherwise, returnNone
.return_format
abbrev
,short
: Return abbreviated hash.long
: Return just unabbreviated hash.ref
: Return refspec. Raises exception when link == False.
link
: Seepscp.link()
below.
pscp.link(hash, refspec=None)
Create reference. pscp.link()
could be used to avoid pruning on garbage collection.
hash
: The hash to be referenced.refspec
: IfNone
,refs/pscp/{timestamp_ms}
is used.
pscp.delete(refspec)
Delete pscp reference. Call pscp.gc()
if you want.
refspec
: Target refspec to be deleted.timestamp_ms
is also allowed.
pscp.gc(prune='now')
Run git gc --prune=<prune>
.
pscp.push(refspec=None, repository='origin')
Push checkpoint to the remote repository.
refspec
: IfNone
, all checkpoints are pushed.
pscp.fetch(refspec=None, refmap=None, repository='origin')
refspec
: IfNone
, all checkpoints are fetched.refmap
: IfNone
,refs/pscp/*:refs/pscp/*
is used.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pscp-0.0.3.tar.gz
.
File metadata
- Download URL: pscp-0.0.3.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.26.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6679a8f4944cc432e90df4b380d3af28d5dd7df0b99c3e7c6e05dde877db9e0e |
|
MD5 | 110c9825c37b337dc20b322460dd1fc9 |
|
BLAKE2b-256 | 6be35cd834360ea8224a758267442e0a59066da9cf769d2f549e813fefaffcec |