Как импортировать существующее хранилище Git в другое?

Python интерпретирует число, начинающееся с 0 как octal, которое является base 8. Вы можете работать с базой, используя двоичную строку 10 как b^1 === b, где b является базой.

# print the decimal value of the binary number 10
>>> print 0b10
2
# print the decimal value of the octal number 10    
>>> print 010
8
# print the decimal value of the hexadecimal number 10
>>> print 0x10
16

В любой базе символ 1 всегда является значением decimal 1, поскольку b^0 === 1 для всех b при чтении справа налево индекс числа начинается с 0.

# print the decimal value of the binary number 1
>>> print 0b001
1
# print the decimal value of the octal number 1
>>> print 0001
1
# print the decimal value of the hexadecimal number 1
>>> print 0x001
1

Как только база интерпретируется (0, 0b, 0x) ведущие 0 не важны.

Количество символов, необходимых для базой является b, где наибольшие символы равны b-1

            Base (b)   Number of Symbols (b)    Symbols (0 : b-1)
Binary      2          2                        0,1
Octal       8          8                        0,1,2,3,4,5,7,6,7
Decimal     10         10                       0,1,2,3,4,5,7,6,7,8,9

. Наибольшее значение, которое может быть представлено числом, (b^n)-1, где n - количество цифр. Для 3-значного числа наибольшее десятичное значение - (10^3)-1 = 999, в восьмеричном (8^3)-1 = 511 (decimal), которое есть 777 в базе 8 и в двоичном (2^3)-1 = 7 (decimal), которое является 111 в базе 2. Таким образом, вы можете видеть, что с меньшим количеством символов (нижняя база) значение, которое вы можете представлять, уменьшается с учетом фиксированного количества цифр.

433
задан ColinM 30 September 2016 в 20:03
поделиться

4 ответа

Вероятно, самым простым способом было бы перетащить материал XXX в ветку в YYY , а затем объединить его с мастером :

В YYY :

git remote add other /path/to/XXX
git fetch other
git checkout -b ZZZ other/master
mkdir ZZZ
git mv stuff ZZZ/stuff                      # repeat as necessary for each file/dir
git commit -m "Moved stuff to ZZZ"
git checkout master                
git merge ZZZ --allow-unrelated-histories   # should add ZZZ/ to master
git commit
git remote rm other
git branch -d ZZZ                           # to get rid of the extra branch before pushing
git push                                    # if you have a remote, that is

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

Примечание: поскольку это было изначально написано в 2009 году, git добавил слияние поддерева, упомянутое в ответе ниже. Я бы, наверное, использовал этот метод сегодня, хотя, конечно, он все еще работает.

406
ответ дан 22 November 2019 в 23:09
поделиться

Мой любимый ответ на этот вопрос:

  1. Заставить его работать
  2. Сделать это правильно
  3. Сделайте это быстро

Что касается читабельности, то никого наплевать на читабельность, кроме следующего неудачника, который должен позаботиться о вашем коде. Однако, как говорится ... если вы серьезно относитесь к своему искусству, а это форма искусства, вы всегда будете стремиться сделать свой код максимально производительным, в то же время оставаясь читаемым для других. Мой друг и наставник (который является БАДАССОМ во всех смыслах) однажды любезно сказал мне на обзоре кода, что «дурак пишет код, который могут понять только они,

-1
ответ дан 22 November 2019 в 23:09
поделиться

Это хорошо известный пример об этом в самом репозитории Git, который в сообществе Git известен как « самое крутое слияние когда-либо » (после строки темы, которую Линус Торвальдс использовал в электронном письме в список рассылки Git, в котором описывается это слияние ). В этом случае графический интерфейс gitk Git, который теперь является частью собственно Git, фактически раньше был отдельным проектом. Линусу удалось объединить этот репозиторий с репозиторием Git таким образом, что

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

. Электронное письмо содержит шаги, необходимые для воспроизведения, но оно не для слабонервных: во-первых, Линус написал Git, так что он, вероятно, знает об этом немного больше, чем вы или я, а во-вторых, это было почти 5 лет назад, и с тех пор Git значительно улучшился , так что, возможно, это теперь намного проще.

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

48
ответ дан 22 November 2019 в 23:09
поделиться

Я думаю, вы можете сделать это с помощью 'git mv' и 'git pull'.

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

Сначала переименуйте структуру XXX, чтобы она соответствовала тому, как вы хотите, чтобы она выглядела в пределах YYY:

cd XXX
mkdir tmp
git mv ZZZ tmp/ZZZ
git mv tmp ZZZ

Теперь XXX выглядит так:

XXX
 |- ZZZ
     |- ZZZ

Теперь используйте 'git pull', чтобы получить изменения:

cd ../YYY
git pull ../XXX

Теперь YYY выглядит так:

YYY
 |- ZZZ
     |- ZZZ
 |- (other folders that already were in YYY)
-2
ответ дан 22 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

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