source:
git-cache-meta --store
destination:
git-cache-meta --apply
#!/bin/sh -e | |
#git-cache-meta -- simple file meta data caching and applying. | |
#Simpler than etckeeper, metastore, setgitperms, etc. | |
#from http://www.kerneltrap.org/mailarchive/git/2009/1/9/4654694 | |
#modified by n1k | |
# - save all files metadata not only from other users | |
# - save numeric uid and gid | |
# 2012-03-05 - added filetime, andris9 | |
: ${GIT_CACHE_META_FILE=.git_cache_meta} | |
case $@ in | |
--store|--stdout) | |
case $1 in --store) exec > $GIT_CACHE_META_FILE; esac | |
find $(git ls-files)\ | |
\( -printf 'chown %U %p\n' \) \ | |
\( -printf 'chgrp %G %p\n' \) \ | |
\( -printf 'touch -c -d "%AY-%Am-%Ad %AH:%AM:%AS" %p\n' \) \ | |
\( -printf 'chmod %#m %p\n' \) ;; | |
--apply) sh -e $GIT_CACHE_META_FILE;; | |
*) 1>&2 echo "Usage: $0 --store|--stdout|--apply"; exit 1;; | |
esac |
source:
git-cache-meta --store
destination:
git-cache-meta --apply
Download jgit.sh
Config
cat > ~/.jgit
accesskey: aws access key
secretkey: aws secret access key
<Ctrl-D>
Setup repo
git remote add origin amazon-s3://[email protected]/repo-name.git
Push
jgit push origin master
Clone
jgit clone amazon-s3://[email protected]/repo-name.git
Pull
jgit fetch
git merge origin/master
@Bananaman if you used pushd "${WHATEVER_DIR}" >/dev/null
and then popd >/dev/null
if any error occurred, you would still end up in the "original" directory without the extra output messages from those commands polluting the output.
if you used
pushd "${WHATEVER_DIR}" >/dev/null
and thenpopd >/dev/null
if any error occurred, you would still end up in the "original" directory without the extra output messages from those commands polluting the output.
Just to inform that pushd
and popd
are bashism and thus unportable. There is one more problem with pushd
is that you do need to handle when pushd
itself fails (e.g. when directory doesn't exist), and if you are not careful you would end up popping one more directory from the stack than needed (which could become a security vulnerability in certain applications).
If you need to return to the original directory, the safest as well as the simplest approach is to cd
in a subshell, and exit the subshell when you are done or an error occurred in that directory. Like this:
func1 () {
# Process current directory
(
set -e
cd "$new_dir"
# Process $new_dir
# When an error occurs, this subshell exits because of the "set -e" command
) || return
# Back to the directory that was current when entering the function
}
Hi @Bananaman! In what version your implementation is based off?