Android-репозиторий синхронизировать последние изменения? - PullRequest
0 голосов
/ 03 января 2011

У меня есть рабочая копия дерева исходников Android, из которой я использовал для компиляции. Я хочу синхронизировать последние изменения из репозитория (любые новые действия, которые они сделали), но я получаю сообщение об ошибке

"You have local changes to 'kernel'; cannot switch branches."
"You have local changes to 'products/common.mk; cannot switch branches."

затем я получаю 2 ошибки, которые, как я полагаю, являются окончанием (похоже, после этого была выполнена еще одна строка синхронизации дерева)

Итак, мой вопрос: как мне синхронизировать их изменения поверх того, что я изменил локально? Я не могу зафиксировать изменение, потому что я не участвую в проекте, я хочу сохранить свои изменения локально.

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

Ваш вопрос на самом деле часто встречается в git - внесение локализованных изменений с использованием git.

Когда вы используете git pull, вы получаете различие только между локальным образом git и удаленным сервером git.всякий раз, когда вы вносите локальные изменения, вы можете ввести git diff, чтобы увидеть различия.Таким образом, для вас ваши шаги должны быть:

  1. git diff > mydiff.patch, чтобы получить разницу патча с изменениями, которые вы сделали.
  2. git checkout -f, чтобы вернуться к исходному изображению до того, как вылокализованные изменения.
  3. git pull для полного обновления git с удаленного сервера.это то, где repo sync также может войти - например, repo sync перейти к последовательности команд git (просмотр через ps -ef)
  4. , затем вы снова примените свои локализованные изменения черезpatch -p1 --dry-run < mydiff.patch для проверки повторного применения.В случае успеха сделайте реальное исправление с помощью:

    patch -p1 < mydiff.patch
    

    Если не успешно, это только означает, что ваши изменения вступают в конфликт с некоторыми изменениями, выполненными на стороне удаленного сервера, которые были зафиксированы другими, и это то, где у вас естьвручную повторить изменения - утомительно, но выбора нет.

Обратите внимание: git можно применить к каждому каталогу, где вы видите каталог .git, и только команду gitвступить в силу на этом уровне каталога.Если вы сделали несколько изменений в разных каталогах с подкаталогом .git, то вы должны сделать git diff и git checkout -f для каждого из этих каталогов.

Например, при выполнении обновления repo sync Iполучил:

Fetching projects: 100% (172/172), done.  
Syncing work tree:   2% (4/171)  error: You have local changes to 'core/base_rules.mk'; cannot switch branches.
Syncing work tree:   3% (6/171)  error: You have local changes to 'tools/dx-tests/Android.mk'; cannot switch branches.
Syncing work tree: 100% (171/171), done.  

external/dbus/: discarding 43 commits
error: build/: platform/build checkout 0683a77348f2a0a529a8e2bcfdf4b6dc6b4c5f5b 
error: cts/: platform/cts checkout a3779fa378345bfd8699e91de46b29563be4beb2 

Обходя вниз, я обнаружил, что под каталогом cts находится .git, поэтому cd cts и git diff дают разницу.

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

В качестве альтернативы вы должны использовать git branch, чтобы построить свою собственную ветку, а затем git merge чтобы объединить вашу ветку с основной веткой по умолчанию (читайте this ).

Команда для объединения будет git merge topic, где topic - ветка, созданная с git branch дляхраните ваши индивидуальные изменения.

В целом операции остаются такими же, как указано выше - конфликты будут возникать, если мастер и ваша ветвь изменяют один и тот же файл в одной строке или ваша модификация приходит ПОСЛЕ мастера.

0 голосов
/ 02 января 2013

Вы можете использовать другую ветку для ваших изменений ... или попробуйте git pull --rebase

0 голосов
/ 03 января 2011

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

Возможно, это руководство (по SO) Git для начинающих: окончательное практическое руководство может помочь.

...