DVCS с центральным репозиторием Windows

Вы создаете список, затем снова конвертируете этот список в строку. Это неправильно.

В приведенном ниже коде я использовал ваши значения списка и применил метод split для каждого элемента списка.

Затем я получаю все значения char и помещаю их в массив.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine("Hello, world!");
            string file = "Berzas,sula;;sula;;klevu saldial lapasula a aila, ar suart zemes vaikai du       ";
            int n = 0;
            while (Math.Pow(n, 2) != file.Length)  
            {
                n++;
            }

            string[,] array = new string[n, n];

            var list = Enumerable
            .Range(0, file.Length / n)
            .Select(i => file.Substring(i * n, n))
            .ToList();

            var res = string.Join(Environment.NewLine, list);
            for (int i = 0; i < n; i++)
            {
                char[] row = list[i].ToCharArray();
                for (int j = 0; j < n; j++)
                {
                    array[i, j] = row[j].ToString();
                }
            }

            int rowLength = array.GetLength(0);
            int colLength = array.GetLength(1);
            for (int i = 0; i < rowLength; i++)
            {
                for (int j = 0; j < colLength; j++)
                {
                    Console.Write(string.Format("{0}", array[i, j]));
                }
                Console.Write(Environment.NewLine);
            }

        }
    }
}
24
задан Mikko Rantanen 31 May 2009 в 17:52
поделиться

5 ответов

Mercurial почти наверняка ваш самый простой вариант в Windows.

Если вы не заботитесь об аутентификации, вы на самом деле можете просто позволить hg serve разрешить push. Для этого вам просто нужно добавить следующее в файл .hg / hgrc в репозитории, который вы хотите обслуживать:

[web]
allow_push = *
push_ssl = false

Первая строка говорит, что любой может перейти в этот репозиторий. Второй указывает Mercurial разрешить отправку без SSL, поскольку hg serve в настоящее время не поддерживает HTTPS. На этом этапе пользователи могут перейти в ваш репозиторий, не имея учетной записи в любом месте. Если вы просто небольшой магазин, это, вероятно, хорошо, тем более что вы можете использовать способность Mercurial подписывать наборы изменений, чтобы гарантировать гораздо более высокий уровень проверяемости, чем обеспечит HTTP Basic.

Для более крупного магазина вы были бы совершенно правы, если бы захотели хотя бы простой барьер для совершения. Для этого вам нужно внести два изменения. Во-первых, вам нужно разместить Mercurial за веб-сервером с поддержкой обратного прокси или CGI. К счастью, последние версии IIS поддерживают оба. Вы можете обратиться к указаниям CGI в Mercurial Redbook для конкретных шагов по Mercurial и руководству Microsoft по настройке приложений CGI в IIS 6 для помощи на стороне IIS.

Далее вам нужно будет установить базовую аутентификацию. IIS предоставляет стандартную базовую версию HTTP Basic, которая в качестве бонуса может выполнять проверку подлинности непосредственно на вашем домене, сводя к минимуму административные издержки.

Наконец, вы ' Я хочу изменить строку allow_push для поддержки только определенных пользователей, указав список имен пользователей, разделенных запятыми. Например:

allow_push = benjamin, ted, the_cow

Вот и все. Mercurial теперь позволяет отправлять запросы пользователям, которые могут проходить аутентификацию через HTTP Basic аутентификацию, и разрешать извлечение всем остальным.

17
ответ дан 28 November 2019 в 23:45
поделиться

После того, как Бенджамин указал на HTTP-сценарии CGI, обслуживающие HTTP, я решил их опробовать и смог разместить репозиторий, размещенный по HTTP. Красная книга , которую связал Бенджамин, очень помогла, как и две статьи в Mercurial wiki. Один, который описывает публикацию Mercurial в целом, и другой, содержащий пошаговые инструкции для настройки скрипта HgWebDir CGI.

Эти инструкции не были полностью надежными, хотя мне приходилось совать вокруг немного. Скорее всего, так как я использую 64-битную Vista. Инструкции ниже документируют то, что я сделал. Теперь, когда я сделал это однажды, я, вероятно, сделал бы все в другом порядке, поэтому не рассматривайте эти пошаговые инструкции.

Mercurial

Сначала я приобрел бинарный файл Mercurial у http: // mercurial .berkwood. com / , который был установлен в d: \ dev \ Mercurial . Я создал репозиторий для тестирования в репозитории d: \ dev \ testRepo с использованием hg init . d: \ dev \ Mercurial \ library.zip содержит файлы библиотеки Mercurial, необходимые для сценария CGI, поэтому они были извлечены в d: \ dev \ Mercurial \ library . Сначала меня смутило то, что, открыв zip-файл, я получил сообщение об ошибке и не увидел содержимого. Просто распаковка файла в каталог сработала.

Для веб-скрипта я скачал источник Mercurial , содержащий hgwebdir.cgi, который был перемещен и переименован в d: \ dev \ Mercurial \ webroot \ hgwebdir.py . Пошаговая статья содержит хорошие инструкции по изменению скрипта hgwebdir для Windows. Они также содержат инструкции для hgweb.config, который в моем случае выглядел так:

[paths]
/hg/hgwebdir.py/test = D:\dev\Mercurial\testRepo

Также в хранилище требовалась следующая конфигурация, чтобы я мог использовать ее без SSL. Примечание. В настоящее время я использую обычную аутентификацию для аутентификации пользователей. Мне пришлось создать конфигурацию в D: \ dev \ Mercurial \ testRepo \ .hg \ hgrc и добавить в нее следующие строки:

[web]
allow_push = *
push_ssl = false

Python

CGI-скрипт - это скрипт Python, поэтому он требует Python. Кажется довольно требовательным, какая версия Python выполняет его. В одной из статей упоминалось, что для его запуска требуется та же версия, которая использовалась для сборки Mercurial. В конце концов, я начал работать над Python 2.5 x86 после того, как попробовал Python 2.6 x64, Python 2.4, Python 2.5 x64.

IIS

Две вещи, которые я пропустил и должен был установить, были поддержка CGI и Basic Authentication. Оба из них были установлены через Панель управления, Программы и Функции. Закончив установку, я создал виртуальный каталог (который я позже изменил на Приложение) в IIS, указывая на D: \ dev \ Mercurial \ webroot . Виртуальному каталогу необходим обработчик CGI для файлов * .py, который можно добавить из сопоставлений обработчиков. Исполняемый файл был D: \ dev \ SDKs \ Python25_x86 \ Python.exe% s . Когда у IIS были разрешения на каталог webroot, я мог перейти на http: //localhost/hg/hgwebdir.py/test и посмотреть репозиторий.

Итак, теперь доступ для чтения работал. Когда я попытался отправить в хранилище, я получил странные сообщения об ошибках, в которых говорилось, что это не настоящее хранилище.

После часа отладки я закончил копирование всего D: Дерево \ dev \ Mercurial \ library \ mercurial под webroot, чтобы Python мог найти D: \ dev \ Mercurial \ webroot \ mercurial \ hgweb \ hgwebdir_mod.pyc . После этого Wireshark сообщал об ошибках Access Denied в трассировке стека. Понятия не было, что на самом деле было причиной этого, но изменив виртуальный каталог на Приложение в IIS и переместив его поверх пула приложений, который работал с учетной записью Local System, ошибки отказа в доступе исчезли.

Также в какой-то момент я дал Раздел реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ WinSock2 \ Parameters предоставляет дополнительные разрешения, чтобы IIS мог получить к нему доступ. Сомневаюсь, что это требуется после использования учетной записи локальной системы.

Как только это было сделано, загрузка материала в хранилище с помощью hg push http: //localhost/hg/hgwebdir.cgi/test работала!

Проблемы и решения

  • Где найти файлы библиотеки.
    • Они находились в файле library.dll в папке установки Mercurial. Мне просто нужно было извлечь их, даже если моя программа распаковки отказалась просматривать содержимое.
  • Как запустить скрипт Python
    • Загрузите правильную версию Python для архитектуры x86, так как скрипт использует некоторые библиотеки x86. Правильная версия Python зависит от версии Mercurial. Для 1.2.1 это был Python 2.5 x86.
    • В качестве альтернативы вы можете попробовать собрать Mercurial из исходников с любой версией Python, которую вы хотите, но в моем случае это не удалось при создании расширений.
  • Как настроить CGI в IIS
    • Сначала убедитесь, что CGI установлен в IIS. Предполагалось, что это не так в инструкциях IIS, опубликованных Бенджамином.
    • Создайте новое сопоставление модулей для * .py в сопоставлениях обработчиков IIS. Правильный модуль - это CgiModule , а исполняемый файл - это ваш исполняемый файл Python +% s
  • Как разрешить сценарию CGI выполнять запись в хранилище
    • Убедитесь, что в сценарии есть все, что ему нужно. Мне пришлось переместить библиотеку \ mercurial \ hgweb \ hgwebdir_mod.pyc в другое место.
    • Убедитесь, что у скрипта есть разрешения на все, что ему нужно. Я решил эту проблему, создав новый пул приложений для сценария CGI, использующего учетную запись локальной системы, преобразовав виртуальный каталог в приложение в IIS и выбрав новый пул приложений.
12
ответ дан 28 November 2019 в 23:45
поделиться

Для команды, делающей первый шаг от VSS, я бы предложил использовать SubVersion для управления источником и либо TortoiseSVN , либо VisualSVN для клиента.

Но если команда приняла решение переключиться на DVCS, то я бы предложил Mercurial, потому что он лучше поддерживает HTTP и окна на клиенте через TortoiseHg .

2
ответ дан 28 November 2019 в 23:45
поделиться

Если вы ищете:

  1. Поддержка распределенной разработки
  2. Безупречный запуск серверов Windows
  3. И отличный графический интерфейс

Вы точно описываете Plastic SCM

0
ответ дан 28 November 2019 в 23:45
поделиться

Прочитав ответ Микко, который почти сработал для меня, я придумал свои собственные примечания для установки. Моя установка была спроектирована как «незащищенный и открытый» репозиторий, который члены моей группы могли бы использовать на сервере Windows 2008.

1. Установите Python.

Я использовал версию Python Python 2.6.2 , и я использовал установщик Windows x86 MSI.

  • Установить для всех пользователей.
  • Установить в C: \ Mercurial \ Python
  • Использовать параметры по умолчанию

2. Установите MinGW.
Я использовал версию Minimalist GNU для Windows MinGW 5.1.4

  • Установите MinGW-5.1.4.exe.
  • Выберите вариант загрузки и установки.
  • Выберите текущий вариант пакета для установки.
  • Для устанавливаемых компонентов выберите вариант «Минимальный».
  • Установить на C: \ Mercurial \ MinGW

3. Измените свой путь.

На этом этапе вам нужно добавить местоположения в путь к среде.

  • Добавьте ' C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin ' в путь (Порядок имеет значение)

4. Установите Mercurial.

Версия mercurial, которую я использовал, была последней версией в стабильной ветке, и я не использовал двоичные файлы, но использовал исходный код. Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin 'к пути (порядок имеет значение)

4. Установите Mercurial.

Версия mercurial, которую я использовал, была последней версией в стабильной ветке, и я не использовал двоичные файлы, но использовал исходный код. Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin 'к пути (порядок имеет значение)

4. Установите Mercurial.

Версия mercurial, которую я использовал, была последней версией в стабильной ветке, и я не использовал двоичные файлы, но использовал исходный код. Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». Я сам хотел скомпилировать mercurial, чтобы он работал с любой версией Python, которую я установил, поэтому мне не приходилось беспокоиться о каких-либо проблемах совместимости, которые, по моему мнению, были самой большой проблемой с другими методами установки. Самый простой способ получить исходный код - это загрузить файл «zip». Стабильная версия Mercurial

  • Распакуйте Zip-файл в C: \ Mercurial \ Source.
  • Создайте исходный код из командной строки.
python setup.py build --force -c mingw32
python setup.py install --force --skip-build

5. Измените свой путь.

Вам необходимо вставить в путь окружения другое место для команды 'hg'.

  • Добавить ' C: \ Mercurial \ Python26 \ Scripts; C: \ Mercurial \ Python26; C: \ Mercurial \ MinGW \ bin 'к пути (порядок имеет значение)

6. Создайте свой файл конфигурации.

Вам необходимо установить имя пользователя по умолчанию, если вы собираетесь выполнять какие-либо коммиты локально на этом сервере.

  • Создать файл ' "C: \ Documents and Settings {username} .hgrc " '
[ui]  
editor = Notepad  
username = your_name 

6. Проверьте свою установку.

Откройте новое командное окно и проверьте его с помощью ' hg debuginstall ' для проверки. Вы должны увидеть что-то вроде следующего.

Checking encoding (cp1252)...  
Checking extensions...  
Checking templates...  
Checking patch...  
Checking commit editor...  
Checking username...  
No problems detected  

7. Настроить веб-каталог.

  • Создать каталог ' C: \ Mercurial \ Web '
  • Скопируйте файл hgwebdir.cgi из ' C: \ Mercurial \ Source ' в ' C : \ Mercurial \ Web '

8. Настройте IIS7 для централизованного репозитория.

Я использовал DefaultAppPool, который использует .Net 2.0, Pipeline = Integrated, Identity = ApplicationPoolIdentity.

  • Убедитесь, что функции CGI доступны в IIS7.
  • Панель управления / Программы / Функции Windows / IIS / Функции разработки приложений / CGI
  • Добавьте приложение в IIS на желаемом веб-сайте.
  • Alias ​​= Mercurial - Physical Path = C: \ Mercurial \ Web
  • В приложении выберите HTTP-модули и добавьте новый Отображение модуля.

8. Настройте IIS7 для централизованного репозитория.

Я использовал DefaultAppPool, который использует .Net 2.0, Pipeline = Integrated, Identity = ApplicationPoolIdentity.

  • Убедитесь, что функции CGI доступны в IIS7.
  • Панель управления / Программы / Функции Windows / IIS / Функции разработки приложений / CGI
  • Добавьте приложение в IIS на желаемом веб-сайте.
  • Alias ​​= Mercurial - Physical Path = C: \ Mercurial \ Web
  • В приложении выберите HTTP-модули и добавьте новый Отображение модуля.

8. Настройте IIS7 для централизованного репозитория.

Я использовал DefaultAppPool, который использует .Net 2.0, Pipeline = Integrated, Identity = ApplicationPoolIdentity.

  • Убедитесь, что функции CGI доступны в IIS7.
  • Панель управления / Программы / Функции Windows / IIS / Функции разработки приложений / CGI
  • Добавьте приложение в IIS на желаемом веб-сайте.
  • Alias ​​= Mercurial - Physical Path = C: \ Mercurial \ Web
  • В приложении выберите HTTP-модули и добавьте новый Отображение модуля.
    • Путь запроса = *. Cgi, Module = CgiModule, Executable = C: \ Mercurial \ Python26 \ python.exe% s, Name = Mercurial.
    • Когда будет предложено добавить запись в список ограничений ISAPI и CGI, ответьте «да».

9. Протестируйте свою веб-настройку.

Теперь вы должны иметь возможность просмотреть http: //localhost/Mercurial/hgwebdir.cgi и просмотреть пустой список репозиториев.

10. Настройка IIS7 для удобного URL-адреса

Мне не нравился недружественный URL-адрес, и этот шаг позволяет переназначить URL-адрес на что-то более понятное. Установите расширение URL Rewrite Moduel 1.1 для IIS.

  • В приложении Mercurial IIS в диспетчере IIS с функциями View выберите компонент URL Rewrite Component и установите новое правило.
  • Выберите «Добавить правила», затем «Шаблон». Правило с перезаписью карты. Правило Действие = Перезаписать, Указать карту перезаписи = Mercurial
  • Добавить запись сопоставления. OriginalValue = '/ Mercurial / Repo', новое значение = '/ Mercurial / hgwebdir.cgi'

11. Создание Mercurial Repository

Теперь вы можете создать тестовый репозиторий.

  • Создайте каталог C: \ Mercurial \ Repository и убедитесь, что учетная запись IUSR имеет разрешения на запись в каталог. (Если учетная запись домена больше похожа на IUSR_ {ComputerName}.
  • Создайте файл C: \ Mercurial \ Web \ hgweb.config, чтобы перечислить репозитории.
[paths]
/ = C:\Mercurial\Repository\**
  • Добавьте каталог C: \ Mercurial \ Repository \ Test и инициализируйте репозиторий с 'hg init'

** Если вы хотите теперь иметь возможность отправлять без ssl, создайте в каталоге .hg репозитория файл hgrc, следующие строки.

[web]
allow_push = *
push_ssl = false

Ссылки:

Установка Mercurial Wiki для Windows
HG Book
Пошаговая инструкция
Публикация репозиториев Mercurial

7
ответ дан 28 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

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