Как я могу проверить репозиторий Git *в* удаленную папку?

Имея голый репозиторий, я могу использовать git --work-tree=/path/to/folder --git-dir=/path/to/bare.git checkout -f в хуке post-receive для извлечения головы в folder без папки .git внутри. Как я могу добиться этого, когда folder находится на удаленной машине?

Мне известно о git clone --depth=1, но я не могу использовать его, поскольку удаленная папка может уже существовать. rsync [--delete] не подходит ни потому, что мне нужны файлы, которые являются локальными для каждой папки, но не в репо (например, все папки содержат разные confi.local.ini).


person Rolf    schedule 20.03.2015    source источник


Ответы (1)


Наконец-то я объединил разные решения, и теперь в моем post-receive есть следующее:

function clone_dev() {
    # This function ssh's to a remote machine (or "localhost") and pulls the
    # latest changes from the bare repo without leaving traces of .git.
    # This approach allows to "local" files to not be overwritten.
    DEV_SSH=$1 # ex: "gitusr@localhost"
    DEV_DIR=$2 # ex: "/data/production/development"
    REPO_DIR_SSH=$3 # ex: "ssh://gitusr@localhost/data/bare.git"
    BRANCH=master

    echo -e "\e[1;31mDeploying to '${DEV_SSH}${DEV_DIR}' ...\e[0m"
    echo ""
    ssh "${DEV_SSH}" /bin/bash <<EOF
if [[ ! -d "${DEV_DIR}" ]]; then
    git clone -b $BRANCH --single-branch --depth=1 "${REPO_DIR_SSH}" "${DEV_DIR}"
    cd $DEV_DIR
    git checkout -f $BRANCH
else
    cd "${DEV_DIR}"
    git init
    git remote add -t $BRANCH origin "${REPO_DIR_SSH}"
    git fetch --depth=1 origin
    git checkout -f -t origin/$BRANCH
fi
cd "${DEV_DIR}"
rm -rf "${DEV_DIR}"/.git
EOF
    echo ""
}

...
REPO_DIR_SSH=ssh://gitusr@$HOSTNAME/$REPO_DIR

# the locations of the cutting-edge systems
DEVELOPMENT1_SSH=gitusr@$HOSTNAME
DEVELOPMENT1_DIR=/data/production/development
...

clone_dev "$DEVELOPMENT1_SSH" "$DEVELOPMENT3_DIR" "$REPO_DIR_SSH"
clone_dev "$DEVELOPMENT2_SSH" "$DEVELOPMENT2_DIR" "$REPO_DIR_SSH"

Частично украдено с: https://stackoverflow.com/a/22597919/2923406 и https://stackoverflow.com/a/11498124/2923406

person Rolf    schedule 20.03.2015