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

У меня есть Git-репозиторий в папке с именемXXXи у меня есть второй репозиторий Git под названиемYYY.

Я хочу импортироватьXXX хранилище вYYY хранилище как подкаталог с именемZZZ и добавить всеXXX»История измененийYYY.

Структура папок перед:

XXX
 |- .git
 |- (project files)
YYY
 |- .git
 |- (project files)

Структура папок после:

YYY
 |- .git  
 bgcode16 сент. 2015 г., 19:58
На GithubТеперь вы можете сделать это из веб-интерфейса при создании нового репо
 BuZZ-dEE17 февр. 2016 г., 10:32

Ответы на вопрос(14)

после объединения все коммиты будут сохранены,git log будут показаны исходные коммиты и правильные пути:

function git-add-repo
{
    repo="$1"
    dir="$(echo "$2" | sed 's/\/$//')"
    path="$(pwd)"

    tmp="$(mktemp -d)"
    remote="$(echo "$tmp" | sed 's/\///g'| sed 's/\./_/g')"

    git clone "$repo" "$tmp"
    cd "$tmp"

    git filter-branch --index-filter '
        git ls-files -s |
        sed "s,\t,&'"$dir"'/," |
        GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info &&
        mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
    ' HEAD

    cd "$path"
    git remote add -f "$remote" "file://$tmp/.git"
    git pull "$remote/master"
    git merge --allow-unrelated-histories -m "Merge repo $repo into master" --edit "$remote/master"
    git remote remove "$remote"
    rm -rf "$tmp"
}

Как пользоваться:

cd current/package
git-add-repo https://github.com/example/example dir/to/save

Если вы сделаете небольшие изменения, вы даже можете переместить файлы / каталоги объединенного репо по разным путям, например:

repo="https://github.com/example/example"
path="$(pwd)"

tmp="$(mktemp -d)"
remote="$(echo "$tmp" | sed 's/\///g' | sed 's/\./_/g')"

git clone "$repo" "$tmp"
cd "$tmp"

GIT_ADD_STORED=""

function git-mv-store
{
    from="$(echo "$1" | sed 's/\./\\./')"
    to="$(echo "$2" | sed 's/\./\\./')"

    GIT_ADD_STORED+='s,\t'"$from"',\t'"$to"',;'
}

# NOTICE! This paths used for example! Use yours instead!
git-mv-store 'public/index.php' 'public/admin.php'
git-mv-store 'public/data' 'public/x/_data'
git-mv-store 'public/.htaccess' '.htaccess'
git-mv-store 'core/config' 'config/config'
git-mv-store 'core/defines.php' 'defines/defines.php'
git-mv-store 'README.md' 'doc/README.md'
git-mv-store '.gitignore' 'unneeded/.gitignore'

git filter-branch --index-filter '
    git ls-files -s |
    sed "'"$GIT_ADD_STORED"'" |
    GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info &&
    mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD

GIT_ADD_STORED=""

cd "$path"
git remote add -f "$remote" "file://$tmp/.git"
git pull "$remote/master"
git merge --allow-unrelated-histories -m "Merge repo $repo into master" --edit "$remote/master"
git remote remove "$remote"
rm -rf "$tmp"

Извещения

Пути заменяет черезsed, поэтому убедитесь, что после слияния он переместился правильными путями.

--allow-unrelated-histories параметр существует только с git>= 2,9.

 ptaylor08 сент. 2017 г., 11:59
Для людей OS X там, установитеgnu-sed чтобы получитьgit-add-repo функция работает. Еще раз спасибо, Андрей!

я думаю, что это немного проще. Извлечение repo_dest выполняется в repo_to_import, а затем выполняется push -set-upstream url: repo_dest master.

Этот метод помог мне импортировать несколько маленьких репо в большее.

Как импортировать: repo1_to_import в repo_dest

# checkout your repo1_to_import if you don't have it already 
git clone url:repo1_to_import repo1_to_import
cd repo1_to_import

# now. pull all of repo_dest
git pull url:repo_dest
ls 
git status # shows Your branch is ahead of 'origin/master' by xx commits.
# now push to repo_dest
git push --set-upstream url:repo_dest master

# repeat for other repositories you want to import

Переименуйте или переместите файлы и директории в нужную позицию в исходном репо перед выполнением импорта. например

cd repo1_to_import
mkdir topDir
git add topDir
git mv this that and the other topDir/
git commit -m"move things into topDir in preparation for exporting into new repo"
# now do the pull and push to import

Метод, описанный по следующей ссылке, вдохновил этот ответ. Мне понравилось это, поскольку это казалось более простым. Но остерегайтесь! Там будут драконы!https://help.github.com/articles/importing-an-external-git-repository git push --mirror url:repo_dest толкает вашу локальную историю репо и состояние на удаленный (url: repo_dest). НО это удаляет старую историю и состояние удаленного. Веселье наступает! : -E

-s theirs но, конечно, эта стратегия нене существует. Моя история заключалась в том, что я разработал проект на GitHub, а теперь по какой-то причине мой местныйmaster не может быть объединен сupstream/master хотя я не сделал никаких локальных изменений в этой ветке. (Действительно нене знаю, что там произошло - я думаю, что вверх по течению были сделаны некоторые грязные толчки за кулисами, может быть?)

То, что я в итоге сделал, было

# as per https://help.github.com/articles/syncing-a-fork/
git fetch upstream
git checkout master
git merge upstream/master
....
# Lots of conflicts, ended up just abandonging this approach
git reset --hard   # Ditch failed merge
git checkout upstream/master
# Now in detached state
git branch -d master # !
git checkout -b master   # create new master from upstream/master

Так что теперь мойmaster снова в синхронизации сupstream/master (и вы можете повторить вышеописанное для любой другой ветви, которую вы также хотите синхронизировать аналогично) .A

 tomekwi08 нояб. 2017 г., 18:51
git reset --hard upstream/master на вашем местномmaster филиал сделает работу. Таким образом, вы непотерять локальный филиал conflg - такие вещи, как по умолчанию вверх по течению.

git-subtree это сценарий, предназначенный именно для этого случая использования объединения нескольких репозиториев в одно при сохранении истории (и / или разбиения истории поддеревьев, хотя это, похоже, не имеет отношения к этому вопросу). Он распространяется как часть дерева мерзавцевс момента выпуска 1.7.11.

Объединить репозиторий на доработке как подкаталогиспользоватьgit subtree add следующее:

git subtree add -P <prefix> <repo> <rev>
</rev></repo></prefix>

Git-поддерево реализуетстратегия слияния поддеревьев в более удобной для пользователя форме.

Для вашего случая внутри репозитория YYY вы должны выполнить:

git subtree add -P ZZZ /path/to/XXX.git master
 Stein01 дек. 2016 г., 20:49
Опыт Noob: git (версия 2.9.0.windows.1) отвечает "фатальный: двусмысленный аргументГОЛОВА': неизвестная ревизия или путь не в рабочем дереве " когда я попробовал это в недавно инициализированном локальном репозитории non-bare, но он работал нормально после того, как ядействительно запустил новый репозиторий, то есть после добавления простого файла и фиксации обычным способом.
 prateekj_ahead04 нояб. 2017 г., 14:38
Спасибо! Это работает как шарм! Один лайнер! : D
 Ronak Jain12 янв. 2017 г., 09:42
Пока это работает, история не поддерживается.
 Johnny Utahh14 июн. 2018 г., 19:39
Работал красиво по моему сценарию.
 kynan12 янв. 2017 г., 17:53
@RonakJain историяявляется утверждал, чтоВ этом весь смысл.
 Tatsh22 нояб. 2015 г., 11:32
Если у вас есть каталог для слияния вместо чистого или удаленного хранилища,git subtree add -P name-of-desired-prefix ~/location/of/git/repo-without-.git branch-name

Предположим, у нас есть 2 репозитория gitFoo а такжебар.

Foo содержит:

foo.txt.git

бар содержит:

bar.txt.git

и мы хотим в конечном итогеFoo содержащийбар история и эти файлы:

foo.txt.gitFoobar / bar.txt

Итак, чтобы сделать это:

 1. create a temporary directory eg PATH_YOU_WANT/patch-bar
 2. go in bar directory
 3. git format-patch --root HEAD --no-stat -o PATH_YOU_WANT/patch-bar --src-prefix=a/foobar/ --dst-prefix=b/foobar/
 4. go in foo directory
 5. git am PATH_YOU_WANT/patch-bar/*

И если мы хотим переписать все коммиты сообщений из bar, которые мы можем сделать, например, в Linux:

git filter-branch --msg-filter 'sed "1s/^/\[bar\] /"' COMMIT_SHA1_OF_THE_PARENT_OF_THE_FIRST_BAR_COMMIT..HEAD

Это добавит[бар] " в начале каждого сообщения коммита.

 oligofren20 мар. 2014 г., 13:32
Не работал для меня. Получил "ошибка: foobar / mySubDir / test_host1: не существует в индексе. Копия патча, который не удался, находится в: /home/myuser/src/proj/.git/rebase-apply/patch Когда вы решите эту проблему, запустите "Git Am - Продолжить ", Это было после применения 11 патчей (из 60).
 Adam Monsen12 сент. 2012 г., 16:57
Если исходный репозиторий содержал ветви и слияния,git am скорее всего потерпит неудачу.
 Jesse Glick11 авг. 2014 г., 16:11
Этот блог имеет аналогичный ответ на несколько иной вопрос (перемещение только выбранных файлов).
 HRJ03 июн. 2013 г., 18:55
Небольшая ошибка: мерзавец что-нибудь раздевает[ ] из сообщения фиксации. Таким образом, вы должны использовать другой маркер, чем[bar]
 CSchulz23 сент. 2014 г., 18:59
Я вижу один недостаток, все коммиты добавляются в HEAD целевого репозитория.

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

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

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

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

 Jakub Narębski06 нояб. 2009 г., 23:48
КСТАТИ. стратегия, используемая для последующих слияний (если они есть) называетсяподдерево объединить, и есть третье лицоgit-subtree инструмент, который может помочь вам в этом:github.com/apenwarr/git-subtree
 Aaron06 окт. 2016 г., 16:43
Для тех, кому интересно, здесьЭто актуальная ссылка!gelato.unsw.edu.au/archives/git/0506/5511.html
 Jörg W Mittag07 нояб. 2009 г., 02:21
Спасибо, я забыл об этом.subtree стратегия слияния, особенно в сочетании сgit-subtree инструмент является хорошей, может быть, даже лучшей альтернативой субмодулям.
 Jason S23 окт. 2015 г., 18:07
Якуб»Ссылка устарела ... здесьХорошая статья в блоге:subtreeblogs.atlassian.com/2013/05/...

Используйте git filter-branch для добавления супер-каталога ZZZ в репозиторий XXXНажмите новую ветку в хранилище YYYОбъединить задвинутую ветку с YYY 'сундук.

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

ГИТ-подмодуль) для вашей проблемы -инструмент gil (git links)

Это позволяет описывать и управлять сложными зависимостями git-репозиториев.

Также это обеспечивает решение дляgit проблема зависимости рекурсивных субмодулей.

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

Тогда вы можете определить.gitlinks файл с описанием отношений с репозиториями:

# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master

# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master

# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master

Каждая строка описывает git ссылку в следующем формате:

Уникальное имя хранилищаОтносительный путь к хранилищу (начинается с пути файла .gitlinks)Git-репозиторий, который будет использоваться в команде git clone.Пустая строка или строка, начинающаяся с #, не анализируется (рассматривается как комментарий).

Наконец, вам нужно обновить репозиторий с корневым образцом:

# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link

# The same result with a single command
gil update

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

Если вы хотите зафиксировать все изменения в каком-либо репозитории со всеми изменениями в дочерних связанных репозиториях, вы можете сделать это с помощью одной команды:

gil commit -a -m "Some big update"

Команды Pull, Push работают аналогично:

gil pull
gil push

Инструмент Gil (git links) поддерживает следующие команды:

usage: gil command arguments
Supported commands:
    help - show this help
    context - command will show the current git link context of the current directory
    clone - clone all repositories that are missed in the current context
    link - link all repositories that are missed in the current context
    update - clone and link in a single operation
    pull - pull all repositories in the current directory
    push - push all repositories in the current directory
    commit - commit all repositories in the current directory

Больше оgit проблема зависимости рекурсивных субмодулей.

на этой статьеИспользование поддерева - это то, что сработало для меня, и была передана только соответствующая история. Публикация здесь на случай, если кому-то понадобятся шаги (не забудьте заменить заполнители на значения, применимые к вам):

в вашем исходном репозитории разделить подпапку на новую ветку

git subtree split --prefix= -b subtree-split-result

в месте назначения слияния репо в ветке результатов разделения

git remote add merge-source-repo <path-to-your-source-repository>
git fetch merge-source-repo
git merge -s ours --no-commit merge-source-repo/subtree-split-result
git read-tree --prefix=<destination-path-to-merge-into> -u merge-source-repo/subtree-split-result
</destination-path-to-merge-into></path-to-your-source-repository>

проверить ваши изменения и зафиксировать

git status
git commit

Дон»забыть

Очистить, удаливsubtree-split-result ветка

git branch -D subtree-split-result

Удалите пульт, который вы добавили, чтобы получить данные из репозитория

git remote rm merge-source-repo

Решение Вопроса

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

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

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

 ebneter27 февр. 2013 г., 00:01
@SebastianBlask I 'мы сделали это несколько раз, и это сохраняет историю - тот'весь смысл использования пультов и т. д.
 Vijay Patel07 нояб. 2009 г., 11:45
Благодарю. Я использовал слегка модифицированную версию вашей техники: я создалпостановка» в XXX, где я создал папку ZZZ и переместилвещи» внутрь. Затем я слил XXX в YYY.
 Gert van den Berg17 мая 2019 г., 10:55
Можно ли сделать ссылку на ответ слияния поддерева? (»Ниже" меняется со временем)
 Oli Studholme12 мая 2012 г., 07:24
Я хотел получить только папку ZZZ и историю репо YYY: я хотел удалить исходное репозиторий XXX и ветку ZZZ репо YYY. Я нашел удаление ветки ZZZ, так как @CrazyPyro предложил удалить историю - чтобы сохранить его, я слил ветку ZZZ в master перед удалением.
 Sebastian Blask27 февр. 2013 г., 09:57
@ebneter: возможно, это не такбольше не работает или чего-то не хватает? Я использую git версии 1.7.10.4 ... после git mv, git status говорит "переименован: материал -> ZZZ / материал» но потом после проверки мастер:новый файл: ZZZ / вещи " после коммита git log только дает этот коммит, а git blan не делаетНе показывать ничего, кроме последнего коммита.
 serup29 янв. 2016 г., 14:17
вы можете добавить что-то вроде этого при перемещении файлов в подпапку:git mv $(ls|grep -v ) /  Это скопирует все файлы и папки в вашу новую папку
 ebneter28 февр. 2013 г., 03:26
@SebastianBlask Я только что связался с этим с двумя моими репозиториями и понял, что есть пропущенный шаг, который никто, казалось, никогда не замечал, несмотря на то, что я получал от этого откровения в течение многих лет. :-) яупомянутый объединить его в мастер, но нена самом деле показать это. Редактирование сейчас ...
 Alex20 нояб. 2018 г., 14:22
Это работает, как и ожидалось, однако каждый раз, когда я перемещаюсь по файлам в другом хранилище, слияние завершается неудачно.both deleted ../../*, added by us, by them-Xtheirs Безразлично»неужели ничего не меняется, кто-нибудь знает, как сделать так, чтобы содержимое папки ZZZ следовало за исходным расположением файлов и соответственно переименовывало / перемещало файлы?
 Stu Thompson02 дек. 2014 г., 02:12
Спасибо за это. Мы'Мы только что прошли через это, но мы хотели взять с собой два филиала: ZZZ - наш трекинговый филиал и AAA - филиал ZZZ. Это заняло у нас некоторое время. Вот мои сжатые заметки: 1) до снятия пульта, пока в./YYY каталогgit checkout -b AAA origin/AAA2) переключиться на YYY иgit fetch3) перенести другую ветку сgit checkout -b AAA other/AAA4) объединить перенесенные ветки.git merge(Посмотрите фильм «Начало», чтобы подготовить свой разум к необходимому Gitfoo)
 ebneter19 мар. 2013 г., 19:56
@ Данра, я нене верю в это - вы меняете расположение файлов, так чтоОбойти это невозможно. Вы могли бы использовать ColinM 'Решение слияния поддерева ниже, но яЯ не уверен, как история выглядит в журнале, поскольку я никогда не делал этого.
 Danra18 мар. 2013 г., 13:33
Есть ли способ сделать это без участия команды git mv? Например, поэтому история сохраняется вмерзавец " команда без использования аргумента --follow.
 Sebastian Blask26 февр. 2013 г., 10:03
Это только я, или это решение не сохраняет историю? Я попробовал это с одним файлом, и после проверки мастера, файл появляется только как добавленный. После коммита у меня есть только один в истории. Результат такой же, как если бы я добавил файл с помощью копирования, вставки и добавления вручную.
 Daniel Cassidy14 апр. 2011 г., 00:22
Я нене вижу причин, почему вы не можетеПродолжать использовать другой репозиторий. Кажется возможным объединить изменения из другого репозитория при условии, что вы используете.git merge -s subtree
 CrazyPyro24 февр. 2011 г., 21:28
Это отлично сработало для меня. Единственные изменения, которые я сделал, были: 1)Git Branch -D ZZZ " до толчка, потому что я нене хочу, чтобы эта временная ветвь висела вокруг. 2)Git Push " давал мне ошибку:Нет общих ссылок и не указано; ничего не делать. Возможно, вам следует указать такую ветку, как 'мастер'." (Источником, к которому я обращался, был пустой пустой репозиторий.) Но "git push --all " работал как чемпион.

) в моем случае. Поддерево было слишком сложным для меня, и другие решения нет работа. Вот что я сделал:

ALL_COMMITS=$(git log --reverse --pretty=format:%H -- ZZZ | tr '\n' ' ')

Это дает вам разделенный пробелами список всех коммитов, которые влияют на файлы, которые я хотел импортировать (ZZZ) в обратном порядке (вам может понадобиться добавить --follow, чтобы также перехватывать переименования). Затем я зашел в целевой репозиторий (YYY), добавил другой репозиторий (XXX) как удаленный, сделал выборку из него и, наконец,:

git cherry-pick $ALL_COMMITS

который добавляет все коммиты в вашу ветку, вы 'Таким образом, у вас будут все файлы с их историей, и они могут делать с ними все, что захотите, как если бы ониМы всегда были в этом хранилище.

Основной пример вЭта статья и рассмотрим такое отображение на репозитории:

A <-> ,YYYB <-> XXX

После всех действий, описанных в этой главе (после слияния), удалите ветку:B-master

$ git branch -d B-master

Затем нажмите изменения.

Меня устраивает.

 а также 'git pull'.I '

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

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

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

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

XXX
 |- ZZZ
     |- ZZZ

Теперь используйтемерзавец чтобы получить изменения через:

cd ../YYY
git pull ../XXX

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

YYY
 |- ZZZ
     |- ZZZ
 |- (other folders that already were in YYY)

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

git remote add XXX_remote <path-or-url-to-xxx-repo>
git fetch XXX_remote
git merge -s ours --no-commit --allow-unrelated-histories XXX_remote/master
git read-tree --prefix=ZZZ/ -u XXX_remote/master
git commit -m "Imported XXX as a subtree."
</path-or-url-to-xxx-repo>

Вы можете отслеживать восходящие изменения, например, так:

git pull -s subtree XXX_remote master

Git сам выясняет, где находятся корни, прежде чем делать слияние, так что вы неНе нужно указывать префикс при последующих слияниях.

Git версии до 2.9: Вы ненужно пройти--allow-unrelated-histories вариант к.git merge

Метод в другом ответе, который используетread-tree и пропускаетmerge -s ours Шаг по сути не отличается от копирования файлов с помощью cp и фиксации результата.

Первоначальный источник был отGithub's "Поддерево слияния " справочная статья.

 patrickvacek09 сент. 2013 г., 16:34
@FrancescoFrassinelli, разве 'Т, что желательно? Внесение истории в этоособенность этого метода.
 Alex Brooks04 февр. 2016 г., 19:09
@ColinM Я имею в виду, если я объединю репоA в репоB с этим методом, тогда безопасно ли полностью удалить репо?A
 ColinM03 февр. 2016 г., 17:01
@AlexBrooks Я полагаю, вы имеете в виду "дистанционный пульт" так как задействован только один репо. Это безопасно, хотя вы, вероятно, выигралитем самым сэкономить много места, поскольку объединенные коммиты останутся в вашем репо. То есть все ваши собственные коммиты и объединенные коммиты живут в одном репо после этой операции.
 Anentropic21 янв. 2013 г., 14:14
это некажется, сохранил историю ... если я сделаюgit log в любом из файлов, которые я извлек, я вижу только один коммит слияния и ничего из его предыдущей жизни в другом репо? Git 1.8.0
 ColinM11 дек. 2013 г., 18:29
@FrancescoFrassinelli Вы пробовали "--следовать" вариант "мерзавец "?
 Anentropic21 янв. 2013 г., 18:28
Ага! если я использую старый путь импортируемого файла, то есть опускаю его подкаталог 's был импортирован в, тогда git log выдаст мне историю коммитов, напримерgit log -- myfile вместоgit log -- rack/myfile
 Anentropic21 янв. 2013 г., 14:27
хм, с другой стороны, я вижу коммиты из импортированного репо, если я простоgit log на корневом уровне, так что это ограничение того, как я пытался просмотреть историю импортированных файлов - есть ли способ?
 lastboy13 мая 2014 г., 14:25
Вы можете найти эту информацию здесьhelp.github.com/articles/working-with-subtree-merge
 Alex Brooks29 янв. 2016 г., 04:09
Если используется это решение, безопасно ли удалять хранилище стойки после завершения слияния?
 Francesco Frassinelli09 сент. 2013 г., 22:09
@patrickvacek Стало трудно просматривать историю, и я 'меня не интересует история моих зависимостей проекта.
 vvassilev18 янв. 2017 г., 11:25
Могу ли я добавить патчи поверх XXX / ZZZ? Что произойдет с Git Pull, если у меня есть патчи в этой подпапке?
 Francesco Frassinelli25 мар. 2013 г., 20:24
Использование git pull, как вы сказали, импортировало логи в мой мастер. Что я могу сделать?
 Artem Russakovskii06 мар. 2017 г., 21:40
Это прямо черная магия. Фантастическое решение.
 lastboy13 мая 2014 г., 14:28
Отличное решение, отлично работает. Я бы просто добавил еще один комментарий, если вы хотите объединить два репозитория, но второй будет объединен с первым (без нового родительского репозитория), замените строку дерева чтения на: git read-tree -mu rack_remote / master- это означает, что Второй репозиторий будет объединен с первым.
 patrickvacek09 сент. 2013 г., 22:57
@FrancescoFrassinelli, если вы нене хочу истории, почему бы просто не сделать обычную копию? Я'я пытаюсь выяснить, что привлекло бы вас к этому методу, если бы не история - этоЕдинственная причина, по которой я использовал этот метод!
 ColinM19 янв. 2017 г., 17:41
@vvassilev Вы можете изменить импортированное поддерево и объединить обновления из апстрима. Когда вы объединяете вышестоящие изменения, конфликты будут разрешаться, как и любое другое объединение.
 Francesco Frassinelli09 сент. 2013 г., 23:20
@patrickvacek Я искал чистый способ иметь зависимости. Может быть, есть лучшее решение для моего вида проблемы (яя не мерзкий эксперт).
 AbuNassar30 сент. 2016 г., 17:43
Мне это нравится; единственное изменение, которое яЯ предлагаю пометить произвольные значения опций как, ну, произвольно. Я предположил "стеллаж» было ключевое слово и так далее.
 Sebastian Bergmann21 авг. 2016 г., 09:43
Это прекрасно работает, спасибо. Есть ли шанс не импортировать теги из другого хранилища?
 Juha Palomäki21 сент. 2016 г., 11:34
@Anentropic Что касается истории, эта ссылка, кажется, предоставляет некоторый способ переписать историю так, чтобы пути указывали на новый подкаталог. Haven»Я еще не пробовал это, поэтому яЯ не уверен, что это работает:gofore.com/...
 dcow04 мар. 2016 г., 07:06
Если вы пропустите явное слияние, это должно заменить подмодули навсегда.
 stuXnet28 июл. 2016 г., 16:43
Начиная с Git 2.9, вам нужна опция--allow-unrelated-histories при выполнении слияния.
 CoupleWavyLines24 февр. 2014 г., 21:17
Альтернативная ссылка, на которую ссылается ссылка Github:kernel.org/pub/software/scm/git/docs/howto/...   Он содержит больше объяснений и рассуждений, и ему немного легче следовать, чем Github.пример.
 bschmitty17 нояб. 2016 г., 22:31
@FrancescoFrassinelli Следует ли обновлять вкладку истории в Bitbucket? Или самое главное - сохранить историю журнала git? Я вижу журнал git, показывающий все прошлые коммиты, и bitbucket также показывает историю через "Виноваты» кнопка, но когда я на самом деле захожу на вкладку истории в репозитории на самом BitBucket, я вижу только мое недавнее слияние .. Я 'Я думаю, вкладка истории связана только с этим файлом?

Ваш ответ на вопрос