Как я регистрируюсь в файлах для создания с мерзавцем?

Я использую мерзавца для управления проектом чаш Грааля, который я имею. Я открыл репозиторий мерзавца на удаленном сервере и что я хочу сделать, когда у меня есть код, работающий локально, я хочу передать его и нажатие к удаленному серверу. Я хочу, чтобы обновленный отличный файл и gsp's был помещен в правильное пятно на удаленном сервере так, чтобы чаши Грааля взяли изменения для удаленного тестирования. Действительно ли это возможно?

5
задан tshepang 13 October 2014 в 06:31
поделиться

3 ответа

Если вы нажатием в удаленный репо, где «кажется, только содержит большой файл Pack, нет фактического исходного кода» (как вы подробно описаны в комментариях), что должно означать » Голая репо », что хорошо для него позволяет вам подтолкнуться без какого-либо риска различий между рабочим деревом и данными GIT.

Тогда, как описано в «, могу ли я использовать Git, чтобы сохранить удаленный сервер в настоящее время? », другой (неповторимый) REPO и крюк после обновления Голая сторона репо, доставит вас туда, куда вы хотите.


OP Trackwired добавляет:

Хорошо, так что я сделал:

  • Создайте голый репо для проверки в следующем
  • Я создал еще один репо, который был стандартным, в основном у меня есть ~ / project.git и ~ / проект .
  • I клонировал Project.git в проекте в и в Project.GIT / Cooks / Post-Update Я поставил:

    CD ..// ./проект Env -i Git Checkout. Env -i Git Pull

Я также убедился, что после обновления был исполняемым.
Когда я запускаю крючок из командной строки, это работает нормально, но, похоже, не работает, когда я делаю регистрацию в репо.

Я согласен с шагами 1 и 2, но затем использовал этот скрипт , как в этот вопрос .

Проверьте, работает ли он с помощью Git Push из вашего локального репо к своему горючему репо.

#!/bin/sh
#
# This hook does two things:
#
#  1. update the "info" files that allow the list of references to be
#     queries over dumb transports such as http
#
#  2. if this repository looks like it is a non-bare repository, and
#     the checked-out branch is pushed to, then update the working copy.
#     This makes "push" function somewhat similarly to darcs and bzr.
#
# To enable this hook, make this file executable by "chmod +x post-update".

git-update-server-info

is_bare=$(git-config --get --bool core.bare)

if [ -z "$is_bare" ]
then
    # for compatibility's sake, guess
    git_dir_full=$(cd $GIT_DIR; pwd)
    case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
fi

update_wc() {
    ref=$1
    echo "Push to checked out branch $ref" >&2
    if [ ! -f $GIT_DIR/logs/HEAD ]
    then
        echo "E:push to non-bare repository requires a HEAD reflog" >&2
        exit 1
    fi
    if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
    then
        wc_dirty=0
    else
        echo "W:unstaged changes found in working copy" >&2
        wc_dirty=1
        desc="working copy"
    fi
    if git diff-index --cached HEAD@{1} >/dev/null
    then
        index_dirty=0
    else
        echo "W:uncommitted, staged changes found" >&2
        index_dirty=1
        if [ -n "$desc" ]
        then
            desc="$desc and index"
        else
            desc="index"
        fi
    fi
    if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
    then
        new=$(git rev-parse HEAD)
        echo "W:stashing dirty $desc - see git-stash(1)" >&2
        ( trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
        git-update-ref --no-deref HEAD HEAD@{1}
        cd $GIT_WORK_TREE
        git stash save "dirty $desc before update to $new";
        git-symbolic-ref HEAD "$ref"
        )
    fi

    # eye candy - show the WC updates :)
    echo "Updating working copy" >&2
    (cd $GIT_WORK_TREE
    git-diff-index -R --name-status HEAD >&2
    git-reset --hard HEAD)
}

if [ "$is_bare" = "false" ]
then
    active_branch=`git-symbolic-ref HEAD`
    export GIT_DIR=$(cd $GIT_DIR; pwd)
    GIT_WORK_TREE=${GIT_WORK_TREE-..}
    for ref
    do
        if [ "$ref" = "$active_branch" ]
        then
            update_wc $ref
        fi
    done
fi
6
ответ дан 13 December 2019 в 19:27
поделиться

Если вы находитесь в Linux, вы можете настроить задание CRON, чтобы скопировать файлы для вас, или если вы находитесь в Windows, вы можете создать запланированную задачу с помощью небольшого сценария BAT или VBS, чтобы скопировать файл на удаленный сервер. Если вам нужна помощь по использованию Git, здесь руководство пользователя. Если это не то, что вы ищете, мы можем работать над то, что может работать лучше или если вам нужна помощь с скриптами, дайте мне знать.

0
ответ дан 13 December 2019 в 19:27
поделиться

Относительно вашего комментария к сообщению Алоса: удаленный - это так называемый чистый репозиторий - он содержит весь репозиторий, за исключением извлеченной копии содержимого. Идея состоит в том, что для центральных репозиториев, которые вы просто нажимаете и извлекаете, файлы не нужны.

Тем не менее, существует множество подходов к тому, что вы пытаетесь сделать.

  • Вы можете создать еще один удаленный клон, не являющийся голым, и использовать его для извлечения из него и проведения тестирования. Это, наверное, самый простой способ.

  • Вы можете напрямую извлекать файлы (используя git read-tree и git checkout-index ) из чистого репозитория (на ум приходит пример git.git ) install-doc-quick.sh ).

  • Вы даже можете использовать удаленный пульт, но помните, что вставка в репозиторий без него опасна, поскольку рабочее дерево не обновляется. В зависимости от вашей версии git существуют различные меры безопасности, которые вам придется переопределить, и вы исправите дерево работы после нажатия ( git reset --hard , вероятно).

Независимо от того, какой подход вы выберете, предполагая, что вы хотите запускать тесты после каждого нажатия, вы можете использовать для этого ловушку post-receive или post-update . (Вы можете попросить его проверить время, прошедшее с момента последнего теста, если вы хотите избежать повторных тестов из-за серии толчков)

5
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: