Как я импортирую существующий модуль CVS в подкаталог существующего репозитория мерзавца

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

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
int array1OriginalLength = array1.Length;
Array.Resize(ref array1, array1OriginalLength + array2.Length);
Array.Copy(array2, 0, array1, array1OriginalLength, array2.Length);

Иначе, можно сделать новый массив

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
T[] newArray = new T[array1.Length + array2.Length];
Array.Copy(array1, newArray, array1.Length);
Array.Copy(array2, 0, newArray, array1.Length, array2.Length);

[еще 112] на доступных методах Массива на MSDN.

6
задан UltraNurd 1 December 2009 в 23:48
поделиться

2 ответа

Выяснил, как делать то, что я хочу, на основе этого ответа на объединение репозиториев git , используя git filter-branch, чтобы сделать так, как если бы модуль, импортированный из CVS, был объединены непосредственно в подкаталог, желаемый в существующем репозитории git

Начиная с каталога, содержащего newproj, существующего репозитория git:

% git cvsimport -k -u -s \- -A ~/Documents/cvs-authors.txt \
    -C newproj-sibling oldproj
% cd newproj-sibling
% git filter-branch --index-filter \
    'git ls-files -s | gsed "s-\t-&subdir/of/newproj/-" |
     GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
     git update-index --index-info &&
     mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
% cd ../newproj
% git pull ../newproj-sibling master

Предполагается, что целевой подкаталог в репозитории git был полностью новым или, по крайней мере, не содержал файлов с общими именами с теми, что находятся в модуле CVS, слияние должно пройти без сбоев.

Одно предостережение: я понял выше, потому что BSD sed, поставляемый с OS X, не может выполнять экранирование символов, например \ t, а я не пока не удосужился присвоить ему псевдоним.

0
ответ дан 17 December 2019 в 20:32
поделиться

У вас есть три варианта. Все они начинают с выполнения чистого cvsimport, так что продолжайте и делайте это.

  1. Ссылка на это репо как на подмодуль.
  2. Извлечь репо в существующее репо и выполнить слияние поддеревьев, чтобы объединить истории.
  3. Сделайте что-нибудь похожее на №3, а затем повторно привейте дерево, чтобы чередовать коммиты в хронологическом порядке на протяжении всей истории.

Номер один означает, что внешний проект полагается на внутренний, но, вероятно, это нежелательно для вас.

Номер два - это объясняется в этом как объединить поддеревья . Это может быть достаточно для вас.


Но , если вам нравится хорошая чистая линейная история, вы можете сделать № 3 и запутать их навсегда. Некоторое время назад я сделал нечто подобное в проекте очистки, и у меня все еще есть много документации и инструментов.

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

Хеш дерева должен сообщить вам, что вы ничего не сломали кроме линии.

Если бы я сделал это снова, я бы, возможно, просто испустил бы файл графтов и сделал фильтр-ветвь .

2
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

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