【问题标题】:Android Source repo sync latest changes?Android 源代码库同步最新更改?
【发布时间】:2011-01-03 16:29:01
【问题描述】:

我有一个用于编译的 Android 源代码树的工作副本。我想同步 repo 中的最新更改(他们所做的任何新事情),但我收到一个错误,

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

然后在我认为结束时出现 2 个错误(之后似乎又做了一行树同步)。

所以,我的问题是,我如何在本地更改的内容之上同步他们的更改? 我不能提交更改,因为我不是项目的贡献者,我想将我的更改保留在本地。

【问题讨论】:

标签: android repository sync


【解决方案1】:

你的问题其实是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 diffgit checkout -f

例如,在进行repo sync 更新时,我得到了:

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 ctsgit diff给出了区别。

上面的方案很简单,因为总是只有一个分支——主分支,而你的更改总是在它之上。

或者您必须使用git branch 来构建您自己的分支,然后使用git merge 将您的分支合并到默认的主分支中(阅读this)。

合并命令为git merge topic,其中topic 是使用git branch 创建的分支,用于存放您的自定义更改。

总体上操作还是和上面一样——如果master和你的分支在同一行修改同一个文件,或者你的修改在master之后,就会发生冲突。

【讨论】:

    【解决方案2】:

    虽然我没有经常使用 git 并且我从咨询消息中假设您正在访问 git 存储库,但我相信该工具只是拒绝覆盖您的本地更改.. 这是一件好事,是的?我认为事情正在按照您的意愿发生,除非您想在本地工作和最新的 repo 视图之间切换。

    也许本指南(关于 SO)Git for Beginners: The definitive practical guide 可能会有所帮助。

    【讨论】:

    • 是的,这纯粹是我缺乏理解。我不熟悉分布式源代码控制系统的工作原理(用于颠覆)。
    【解决方案3】:

    您可以使用另一个分支进行更改...或尝试 git pull --rebase

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多