Автоматическая синхронизация между Github и Kiln - PullRequest
9 голосов
/ 30 марта 2011

Я - дизайнер внешнего интерфейса и не имею большого опыта программирования. Я делаю CSS / HTML и немного JavaScript. Техническая команда нашей компании перенесла контроль версий с Git (github) на Mercurial (Kiln). Единственная причина для них - получить функцию просмотра кода в Kiln (мы используем Fogbugz и нам это нравится).

Проблема в том, что сторонние разработчики и сторонние разработчики, работающие в нашем управлении версиями, постоянно набирают обороты. Мы используем hg-git для развертывания на Heroku и используем для git (никогда не работали с другими системами контроля версий). Я уверен, что Mercurial - отличный инструмент, но я должен сделать вывод, что мы тратим слишком много времени на проблемы и ошибки.

Я подумал: есть ли способ использовать git на github, а затем синхронизировать все коммиты и т. Д. С Mercurial (Kiln)? Тогда мы могли бы использовать git и по-прежнему иметь функции проверки кода в Kiln.

Надеюсь, ты сможешь помочь. Я хотел бы вернуться в нашу техническую команду с решением;)

Ответы [ 4 ]

8 голосов
/ 30 марта 2011

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

Неблагоприятные опции для синхронизации: расширение для git-hg, hgit и Mercurial, а также поддержка Mercurial для подкаталогов git, но вы пожалеете о любом из них, потому что им потребуется большее понимание обоих инструментов, чем при использовании одного из них.

Либо заставьте разработчиков переключиться назад, либо заставьте их перезаписать ваши ресурсы развертывания для вас, но не беспокойтесь о том, чтобы работать в одной и той же компании.

3 голосов
/ 12 марта 2013

Сегодня Kiln v3 был запущен с Kiln Harmony, который имеет встроенную поддержку Git (фактически, он позволяет и Mercurial, и Git на одних и тех же репозиториях!).

Как фанат Mercurial, я написал скрипт дляпериодически синхронизировать репо с GitHub, чтобы я мог размещать свой код на GitHub, но все равно ежедневно использовать только Mercurial.

Последняя версия функция PowerShell доступна как Gist ,но я вставил здесь и текущую версию для удобства.

<#
.SYNOPSIS
    Script to sync a GitHub repo to Kiln to allw GitHub contributions without using Git (use Hg on your Kiln repos!).
.DESCRIPTION
    Create a branch repo in Kiln specifically for for the GitHub sync and run this PS script periodically (PoSh v3
    scheduled jobs make this easy).

    Merge the GitHub branch repo (using Hg!) into your main repo periodically, then push back to the GitHub branch
    once done. This will be sync'd back to GitHub when the script next runs.

    Avoid simultaneous changes in the GitHub repo and the Kiln GitHub branch repo, as we don't want the automated
    script merging (esp. as they could conflict).
.EXAMPLE
    Sync-GitRepositories `
        "$kilnBase/Misc/Group/NewSyncTest-GitHub.git" `
        "$githubBase/NewSyncTest.git" `
        "$tempSyncBase\Scripted"
#>
function Sync-GitRepositories
{
    param(
        [Parameter(Mandatory)]
        [string]$gitRepo1,
        [Parameter(Mandatory)]
        [string]$gitRepo2,
        [Parameter(Mandatory)]
        [string]$tempSyncPath,
        [string]$gitExecutable
    )

    # If we weren't given a path to git, assume it's in the path.
    if (!$gitExecutable)
        { $gitExecutable = "git" }

    # Clone the Kiln Github branch repo if we haven't already got a copy.
    if (!(Test-Path $tempSyncPath))
    {
        & $gitExecutable clone $gitRepo1 $tempSyncPath | Out-Default
        Push-Location $tempSyncPath

        # Add a remote for the GitHub repo that we're syncing with.
        & $gitExecutable remote add github $gitRepo2 | Out-Default
    }
    else
    {
        Push-Location $tempSyncPath
    }

    # Fetch changes from the Kiln GitHub branch repo and merge them in.
    # Note: Use FastForward-Only to avoid merging (this is automated!), if changes are made to
    # both GitHub and Kiln GitHub branch simultaneously, we'll have to manually resolve it.
    # Errors from this script should be emailed to the user!
    # Note: Always use -q because Git writes progress to STDERR! #WTF
    & $gitExecutable fetch origin -q | Out-Default
    & $gitExecutable merge origin/master --ff-only -q | Out-Default

    # Repeat the process with any changes from GitHub.
    & $gitExecutable fetch github -q | Out-Default
    & $gitExecutable merge github/master --ff-only -q | Out-Default

    # Push changes back to both Kiln GitHub branch repo and GitHub repo.
    & $gitExecutable push origin : -q | Out-Default
    & $gitExecutable push github : -q | Out-Default

    Pop-Location
}
2 голосов
/ 30 марта 2011

Возможно, вы могли бы использовать ловушку git post-commit для синхронизации / изменения ваших изменений в Kiln, используя git-hg ?

0 голосов
/ 24 января 2012

Вы также можете настроить Custom Web Hook в Kiln для синхронизации с Git из Kiln.

...