git: об'єднання змін із основним репо в code.google.com


1

Скажімо, я створив клон http://code.google.com/r/kkowalczyk-leveldb з http://code.google.com/p/leveldb за допомогою веб-інтерфейсу на code.google.com

З часу, коли я створив свій клон, в http://code.google.com/p/leveldb були внесені зміни, і я хотів би об'єднати їх із своїм клоном, бажано, зберігаючи історію (тобто я міг би їх об'єднати вручну за допомогою diff / інструмент злиття, але це не зберігає історію git).

Які магічні команди виконувати таке злиття?

Переважно, будь ласка, надайте цілі команди. Я думаю, що це буде включати комбінацію git fetch і git merge та віддаленого відстеження гілок тощо. Моя проблема полягає в тому, що я не можу читати man сторінки для git fetch або злиття, я просто не розумію їх.

Оновлення:

Враховуючи коментар Ледачого Барсука нижче, я вирішив половину питання:

git remote add original https://code.google.com/p/leveldb/

Створює щось, що називається "оригінальним", вказує на джерело. Тоді я можу:

git pull original master

Який вибір і об'єднання змін змінюється від оригіналу до мого майстра філії. Я б хотів зробити це в два окремі кроки: як git fetch і git зливають $ щось, щоб злитися в мою поточну гілку.

Однак, після отримання git fetch original, я не знаю, що $ щось було б. Коли я роблю гіт-гілку -а, я не бачу нічого, пов'язаного з моїм віддаленим оригінальним річчю.

Що ускладнює те, що в оригіналі є також 3 гілки.

Отже, куди йдуть дані, отримані з оригіналу, і як я повинен посилатися на них у своєму git merge $ something?



Відповідь [знайдено тут] [1], лише невеликий гугл. [1]: stackoverflow.com/questions/4313125/…
Ледачий борсук

Перегляньте оновлення. Ті насправді не відповідають на мої запитання.
Кшиштоф Ковальчик

Відповіді:


2

Ви вже знайшли, як додати ще один пульт і витягнути прямо з нього:

git remote add original https://code.google.com/p/leveldb/
git pull original master

Якщо ви хочете зробити збір та злиття окремо (замість однієї команди потягування; можливо, тому, що ви хочете перевірити, що змінилося перед об'єднанням), ви можете зробити це так:

git fetch original         # update refs/remotes/original/*
git merge original/master  # merge refs/remotes/original/master

Ви можете перевірити зміни перед об'єднанням із цією командою:

git log --reverse -p original/master@{1}..original/master@{0}

Замість використання вищевказаної специфікації редагування, ви також можете просто скопіювати та вставити oldhash..newhashспецифікацію версії, яка була виведена під час отримання.


Технічно git pull remote branchближче до цієї пари команд:

git fetch remote-or-url branch  # grab remote branch and put it in FETCH_HEAD
git merge FETCH_HEAD            # merge it

але ця пара (і, таким чином, також витягування як із віддаленим, так і з вказаним гілкою) зазвичай не така приємна, оскільки не оновлює гілки віддаленого відстеження ( refs/remotes/original/*). Вилучення + виклик гілки вилучення та витягнення корисні для одноразового злиття із сховищ, для яких ви не особливо бажаєте зберігати повний набір відділень віддаленого відстеження (тобто отримання / витягування запиту на об'єднання від другорядного / рідкісного учасника) .


0

Ви можете додати кілька віддалених файлів до одного сховища. Отримавши другий пульт дистанційного керування, ви можете просто натиснути зміни першого на другий. Наприклад:

git clone <google_URI>
cd <projdir>
git remote add github <github_URI>
git push github master

Це не відповідає на моє запитання - дивіться оновлення. Що я хочу знати: після git remote додайте github <github_URI>, а потім git fetch github, що є <sth> у git merge <sth>, припускаючи, що github remote має 2 гілки, наприклад, master і win.
Кшиштоф Ковальчик

Відповідь Кріса нижче показує кричуще: FETCH_HEAD або оригінал / master зробив би. Або ви можете створити іншу локальну гілку з будь-якого з двох, і злитися звідти.
Дайстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.