Skip to content
Snippets Groups Projects
Commit 93b8c205 authored by Richard Hartmann's avatar Richard Hartmann
Browse files

Merge branch 'feature--clone_branch'

Conflicts:
	vcsh
parents 7161ee4a 4327b9b3
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ vcsh(1) - Version Control System for $HOME - multiple Git repositories in $HOME
`vcsh` [<options>] <command>
`vcsh` clone <url> [<repo>]
`vcsh` clone [-b <branch>] <url> [<repo>]
`vcsh` delete <repo>
......@@ -86,6 +86,9 @@ an interactive user.
If you need to clone a bundle of repositories, look into the
`post-clone-retired` hook.
You can also use a single git repository with several branches. Use the `-b`
option to specify a branch at clone time, the default is `master`.
* commit:
Commit in all repositories
......
......@@ -100,7 +100,8 @@ help() {
-v Enable verbose mode
commands:
clone <remote> \\
clone [-b <branch>] \\
<remote> \\
[<repo>] Clone from an existing repository
commit Commit in all repositories
delete <repo> Delete an existing repository
......@@ -149,16 +150,16 @@ clone() {
hook pre-clone
init
git remote add origin "$GIT_REMOTE"
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
VCSH_CLONE_ERROR=$(git ls-remote origin master 2>&1)
if [ -n "$VCSH_CLONE_ERROR" ]; then
rm -rf "$GIT_DIR"
fatal "$VCSH_CLONE_ERROR" 1
git checkout -b "$VCSH_BRANCH" || return $?
git config branch."$VCSH_BRANCH".remote origin
git config branch."$VCSH_BRANCH".merge refs/heads/"$VCSH_BRANCH"
if [ $(git ls-remote origin "$VCSH_BRANCH" 2> /dev/null | wc -l ) -lt 1 ]; then
info "remote is empty, not merging anything"
exit
fi
git fetch
git fetch origin "$VCSH_BRANCH"
hook pre-merge
git ls-tree -r --name-only origin/master | (while read object; do
git ls-tree -r --name-only origin/"$VCSH_BRANCH" | (while read object; do
[ -e "$object" ] &&
error "'$object' exists." &&
VCSH_CONFLICT=1
......@@ -166,7 +167,7 @@ clone() {
[ x"$VCSH_CONFLICT" = x'1' ]) &&
fatal "will stop after fetching and not try to merge!
Once this situation has been resolved, run 'vcsh $VCSH_REPO_NAME pull' to finish cloning." 17
git merge origin/master
git merge origin/"$VCSH_BRANCH"
hook post-merge
hook post-clone
retire
......@@ -497,11 +498,28 @@ case $VCSH_COMMAND in
esac
if [ x"$VCSH_COMMAND" = x'clone' ]; then
VCSH_BRANCH=
if [ "$2" = -b ]; then
VCSH_BRANCH=$3
shift
shift
fi
[ -z "$2" ] && fatal "$VCSH_COMMAND: please specify a remote" 1
GIT_REMOTE="$2"
[ -n "$3" ] && VCSH_REPO_NAME=$3 || VCSH_REPO_NAME=$(basename "${GIT_REMOTE#*:}" .git)
[ -n "$VCSH_BRANCH" ] || if [ "$3" = -b ]; then
VCSH_BRANCH=$4
shift
shift
fi
if [ -n "$3" ]; then
VCSH_REPO_NAME=$3
[ -z "$VCSH_BRANCH" ] && [ "$4" = -b ] && VCSH_BRANCH=$5
else
VCSH_REPO_NAME=$(basename "${GIT_REMOTE#*:}" .git)
fi
[ -z "$VCSH_REPO_NAME" ] && fatal "$VCSH_COMMAND: could not determine repository name" 1
export VCSH_REPO_NAME
[ -n "$VCSH_BRANCH" ] || VCSH_BRANCH=master
GIT_DIR=$VCSH_REPO_D/$VCSH_REPO_NAME.git; export GIT_DIR
elif [ "$VCSH_COMMAND" = 'version' ]; then
echo "$SELF $VERSION"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment