-
-
Save nicferrier/2277987 to your computer and use it in GitHub Desktop.
#!/bin/sh | |
REPOSRC=$1 | |
LOCALREPO=$2 | |
# We do it this way so that we can abstract if from just git later on | |
LOCALREPO_VC_DIR=$LOCALREPO/.git | |
if [ ! -d $LOCALREPO_VC_DIR ] | |
then | |
git clone $REPOSRC $LOCALREPO | |
else | |
cd $LOCALREPO | |
git pull $REPOSRC | |
fi | |
# End |
I know it's very old but for those interested in a one liner, I would suggest using: git clone <REPOSRC> || (cd <LOCALREPO> ; git pull)
.
:)
@YannDubs, I like your oneliner. It works great!
btw: Is there a way to "swallow" the error message generated by git clone <REPOSRC>
to make the output less confusing in case a repo exists?
git clone "$REPOSRC" "$LOCALREPO" 2> /dev/null || (cd "$LOCALREPO" ; git pull)
git clone "$REPOSRC" "$LOCALREPO" 2> /dev/null || git -C "$LOCALREPO" pull
/dev/null would hide error messages in first clone, so the full if
conditional is safer.
Can always use ;
to compress shell code into a one-liner... 😉
Could also do the pull unconditionally, mildly less efficient but condenses to:
[ -d $LOCALREPO_VC_DIR ] || git clone $REPOSRC $LOCALREPO
(cd $LOCALREPO; git pull $REPOSRC)
The parens around (cd ...; git pull ...)
are not needed when it's a standalone script like here but good in a larger context — cd
done in a sub-shell won't affect the rest of the script.
P.S. A futher tweak: testing existance -e $LOCALREPO_VC_DIR
rather than requiring it to be a directory -d
is slightly more generic for cases when the clone was created by other means — it's possible for .git
to be a text file with content gitdir: ...
, as set up by git submodule
, git worktree
and maybe others...
I made this script, a "little bit" more complex but which fulfilled my specific needs: https://gist.github.com/jotaelesalinas/cc88af3c9c4f8664216ea07bd08c250f
git clone "$REPOSRC" "$LOCALREPO" 2> /dev/null || (cd "$LOCALREPO" ; git pull)
Thank you. 👍
No need to cd
into the directory to pull from it. git -C "$LOCALREPO" pull
Thanks!
Suggest quoting your variables in case of whitespace for robustness!