Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.HUSKY
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.HUSKY с датами от 16 Jul 13 10:00:06 до 14 Jun 24 23:49:14, всего сообщений: 5324
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 2597 из 5324 ========================================= RU.HUSKY =
От   : Pavel Gulchouck                  2:463/68           24 May 17 09:46:40
Кому : Alexey Vissarionov                                  24 May 17 09:46:40
Тема : freeze
FGHI : area://RU.HUSKY?msgid=2:463/68+59254a23
На   : area://RU.HUSKY?msgid=2:5020/545+59245b01
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.HUSKY?msgid=2:463/68+59259a08
Ответ: area://RU.HUSKY?msgid=2:5020/545+5925c27a
Ответ: area://RU.HUSKY?msgid=2:5005/49+5926428f
==============================================================================
Hi Alexey!

23 May 17, Alexey Vissarionov ==> Pavel Gulchouck:

MD>>>> Как Гульчук сделал синхронизированную копию гитхаба и своего cvs

AV>>> Могу предположить, что у него первична CVS-репа

PG>> Там нет первичных/авторичных, там "master-master", т.е. все коммиты
PG>> реплицируются в обе стороны, включая ветвление. Предпочтение,
PG>> конечно, отдаётся гиту, cvs поддерживается исключительно для обратной
PG>> совместимости, но коммитить в cvs тоже можно.
PG>> Скрипты совсем небольшие, всего около сотни строк, хотя попариться с
PG>> их отладкой какое-то время пришлось. Используются "git
PG>> cvsexportcommit" и "git cvsimport". Если интересно, могу поделиться.

AV> Интересно. Делись :-)

Все модули проекта конвертнул и выложил на github (с историей и ветками):
https://github.com/pgul/husky
Решил не объединять их все в один репозиторий, а сделать сабмодулями. Впрочем, объединить всегда можно, если это покажется удобным. История при этом не потеряется, но ветки и тэги в этом случае будут относиться ко всему проекту husky - собственно, из-за этого я и не стал их объединить.

Получить всё можно так:

git clone git@github.com:pgul/husky.git
cd husky
git submodule update --init --recursive

Потом обновлять можно командой
git pull --recurse-submodules

Можете клонировать, форкать и т.п.

Зачем это нужно - потому что мне не нравится то, как это делаешь ты.
А именно - хочешь забрать проект из общественного доступа с несколькими разработчиками на личный сервак и личный домен, где патчи сможешь принимать или не принимать только ты лично, да ещё и с потерей истории и веток.
По той же причине ты оставляешь его на гитхабе в read-only - чтобы не потерять единоличный контроль. А объяснение о том, что патчи должны присылаться только по фидо - нелепая отговорка, ведь полезность патча совсем нетрудно оценить независимо от того, каким путём он пришёл. Попутно тебе пришлось отказаться от гитхаба как от удобного инструмента (пул-реквесты, ревью, доработки, обсуждения и т.п.).

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

Подключение jenkins и всякого прочего не зависит от того, на каком из серверов находится корневой репозиторий. Кроме того, на гитхабе есть веб-хуки.

Автоматическую синхронизацию между github и sf настрою позже.

Готов переместить репозиторий из github.com/pgul в github.com/huskyproject, если там будут даны права коммитить всем разработчикам husky (т.е. тем, которые имеют права коммитить в husky на sf.net).

Впрочем, если кто желает настроить репликацию между cvs и github у себя - you're welcome. Вот скрипты:

cvs2git.sh:

=====
#! /bin/sh

set -e
set -o pipefail

HOME="/usr/local/git-repos"
REPO="$1"
cd "$HOME/$REPO"

git checkout -q master
git cvsimport -a -d /usr/local/cvsroot -r cvs -k -i "$REPO" | { grep -v '^Already' || true; }
git fetch -q origin
for branch in `git branch | sed 's/^. //' | grep -v ^_`; do
    git checkout -q $branch
    git merge -q --ff-only origin/$branch
    COMMITS=`git log --format="tformat:%H" --reverse --author='<([^g]|g[^i]|gi[^t]|git[^>])' -E _cvs/$branch..cvs/$branch`
    NEED_PUSH=""
    if [ -n "$COMMITS" ]; then
        for commit in $COMMITS; do
            git cherry-pick $commit
            NEED_PUSH=1
        done
    fi
    git checkout -q _cvs/$branch
    git merge -q --ff-only cvs/$branch
    [ -z "$NEED_PUSH" ] || git push -q origin $branch && git push -q --tags origin $branch
done
git checkout -q master
=====

git2cvs.sh:

=====
#! /bin/sh

set -e
set -o pipefail

HOME="/usr/local/git-repos"
REPO="$1"
cd "$HOME/$REPO"

# Fetch new commits from github
git fetch -q origin

# export all new commits to cvs
export GIT_DIR=`pwd`/.git
for branch in `git branch | sed 's/^. //' | grep -v ^_`; do
    git checkout -q $branch
    COMMITS=`git log --no-merges --format="tformat:%H" --reverse ..origin/$branch`
    if [ -n "$COMMITS" ]; then
        cd "../${REPO}.cvs"
        cvs -q update -C
        if [ "$branch" = "master" ]; then
            cvs update -kk -A
        else
            cvs update -kk -r $branch
        fi
        for commit in $COMMITS; do
            git cvsexportcommit -c -p $commit
        done
        cvs -q update
        cd "$HOME/$REPO"
        git merge --ff-only origin/$branch
    fi
done

git checkout -q master
=====

              Lucky carrier,
                           Паша
                           aka  gul@gul.kiev.ua
--- GoldED+/LNX 1.1.5-b20160827
* Origin: printf("%s", "How can I increase performance?\n"); (2:463/68)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.058859 секунды