LINUX.ORG.RU

git - как добавить код в ветку своего репозитория из чужого без костылей?

 


0

1

Коллеги, добрый день!

Есть мой репозиторий, есть чужой (репозитории с разными коммитами, историей и т.п.). - Как на регулярной основе можно в ветку своего репозитория, забирать код из ветки чужого репозитория - без костылей?

★★★★★

История разная, а код совпадает? Можно чуть подробнее кейс.

  • Если код разный, то нужны submodule
  • Если код один, то тут сильно зависит от желаймого итогового результата и определения слова костыли
Belkrr
()
Ответ на: комментарий от Belkrr

Истории разные код не совпадает.

Идея в следующем: я учусь, и свои домашки сдаю в ветках, а не не целыми репозиториями, хотел взять учебный код в свою ветку, поправить и сдать. - Как наиболее рационально решить подобный вопрос? Спасибо.

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON
  1. Слонировать репу с учебным кодом.
  2. При начале работы над домашкой - обновить репу с учебным кодом и скопировать нужные файлы из нее в свою репу.
  3. Сделать начальный коммит.

Зачем что-то усложнять?

Альтернатива, но это уже на грани костылей.

Belkrr
()
Ответ на: комментарий от Belkrr

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

DALDON ★★★★★
() автор топика

В случае обновления своей ветки для gentoo portage tree я делаю так (см сначала упомянутый git remote add):

git checkout master
git fetch upstream
git merge upstream/master
git checkout moya_vetka
git rebase master

После этого добавляю новые коммиты или правлю старые. Ветку master я обновляю, чтобы при создании ещё одной новой ветки от него, там была актуальная информация. Да и переключаться между ветками быстрее, если они меньше отличаются.

grem ★★★★★
()

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

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

anonymous
()

git diff на одной стороне

git apply на другой

пути, если нужно, можно поправить прямо в диффе. Если нужен не только код но и коммиты, то заменить git diff на git format-patch

Lrrr ★★★★★
()

Если хочешь, чтобы у тебя была пачка репозиториев в одном, то можно использовать git submodule.

Делаешь git submodule add git@… в своем репозитории, после чего у тебя появляется папка с названием репозитория который ты скачал. Заходишь в нее и работаешь там как с отдельной репой. Инициализировать на новом компе сабмодули не забывать нужно: git submodule update –init –recursive

Удобство в том, что тебе не нужно париться с мержем. Раз у тебя в отдельных репах код независимый.

Norgat ★★★★★
()
Ответ на: комментарий от DALDON

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

Это возможно только если у тебя два репозитория одного проекта. Как только у тебя два разных репозитория, это работать не будет очевидным способом (тк у гита не может быть две ветки истории в одном репозитории).

Norgat ★★★★★
()
Ответ на: комментарий от DALDON

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

Это тебе апстрим показывали. В git remote -v лежит, но это норм только если у тебя либо изначально пустая репа, либо клон той что в апстриме (при клонировании автоматом получается). А так — модули, либо патчи — смотря что менее трудозатратно в твоей домашке... И вообще, что за превозмогание собственноручно созданных трудностей? Если домашка с чужим кодом не связана — быть ей в отдельной репе и не сношать себе мозги. Если код зависит от чужого кода — ну так сделай чтоб твой подключался по путям к бинарям/заголовкам и не затрагивал чужие сорцы. Ах да... тебя еще про язык не спросили :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

В домашке не требовалось смешения кода, или реп. Я просто решил, что это достаточно простая задача. Но, послько в git опыта нет, решил попробовать сперва сам, а как не получилось, пришел на форум. :)

DALDON ★★★★★
() автор топика