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. Таким образом, вы можете видеть, что с меньшим количеством символов (нижняя база) значение, которое вы можете представлять, уменьшается с учетом фиксированного количества цифр.
Вероятно, самым простым способом было бы перетащить материал 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 добавил слияние поддерева, упомянутое в ответе ниже. Я бы, наверное, использовал этот метод сегодня, хотя, конечно, он все еще работает.
Мой любимый ответ на этот вопрос:
Что касается читабельности, то никого наплевать на читабельность, кроме следующего неудачника, который должен позаботиться о вашем коде. Однако, как говорится ... если вы серьезно относитесь к своему искусству, а это форма искусства, вы всегда будете стремиться сделать свой код максимально производительным, в то же время оставаясь читаемым для других. Мой друг и наставник (который является БАДАССОМ во всех смыслах) однажды любезно сказал мне на обзоре кода, что «дурак пишет код, который могут понять только они,
Это хорошо известный пример об этом в самом репозитории Git, который в сообществе Git известен как « самое крутое слияние когда-либо » (после строки темы, которую Линус Торвальдс использовал в электронном письме в список рассылки Git, в котором описывается это слияние ). В этом случае графический интерфейс gitk
Git, который теперь является частью собственно Git, фактически раньше был отдельным проектом. Линусу удалось объединить этот репозиторий с репозиторием Git таким образом, что
git pull
изд. . Электронное письмо содержит шаги, необходимые для воспроизведения, но оно не для слабонервных: во-первых, Линус написал Git, так что он, вероятно, знает об этом немного больше, чем вы или я, а во-вторых, это было почти 5 лет назад, и с тех пор Git значительно улучшился , так что, возможно, это теперь намного проще.
В частности, я предполагаю, что в настоящее время можно использовать подмодуль gitk в этом конкретном случае.
Я думаю, вы можете сделать это с помощью '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)