2011-03-20 48 views
4

我想从远程git存储库合并几个子目录到我的存储库。远程和本地存储库都包含整个内核存储库,我只对无线相关文件感兴趣。 我试图按照"How to use the subtree merge strategy"下的说明操作,但由于大多数文件都存在于本地存储库和远程存储库中,因此命令 git read-tree --prefix=dir-B/ -u Bproject/master命令失败。我不能在同一命令行中使用-m选项和--prefix如何合并/从远程存储库中提取

这种合并实际上应该根据远程存储库中的文件来更新(合并/拉出)所有相关的无线目录/文件,其中应该通过偏好远程文件来解决冲突。

为了使我的问题一般 - 说你有存储库A和B.都有文件夹wireless_dir:A/wireless_dir,B/wireless_dir。我正在处理存储库B,并希望从A/wireless_dir中更新B/wireless_dir中的所有文件,在发生合并冲突时首选更改A/wireless_dir。

+0

这是Linux内核吗?是不是使用子模块来做这样的组件 - 意味着它们已经是独立的存储库? – Cascabel 2011-03-20 18:56:52

回答

1

从Jeformi的评论看来,看起来你已经有了这样一种情况,即文件夹是一个单独的存储库,如果是这种情况,你所要做的就是git pull

不过,如果你正在寻找的提交有来自你不希望其他文件夹中的文件,Git的让你“unsqaush”在周围方式这里所说的承诺:redhatmagazine

步骤要做到这一点(更符合你的情况)是:

1)记下你的HEAD当前所处的位置,让我们把它叫做<OLD_HEAD>。这可以从日志通过使用获得并期待在最近提交的SHA1:

git log 

2)拉的变化,从回购一到你的分支(这将包括任何你可能不希望):

git pull <repo A> <branch_name> 

3)现在是它的时间来使用<OLD_HEAD>(在非庸俗的方式)......这是由复位

git reset --mixed <OLD_HEAD> 

4)的一切,你做了你而做回到<OLD_HEAD>并且您的索引也是如此,但是在工作目录中,现在您已经查看了您一直在寻找的repo A的更改以及wireless_dir文件夹之外的潜在文件。要以交互方式在你的工作目录中的这些文件合并到您的索引的使用(仅限于从wireless_dir的文件,如果这就是你想要的):

git add --patch <filename> 

5)最后:

git commit -m “Selectively merged my files” 

注:如果您不希望有机会搞砸你的分支,在尝试上述之前建立一个新的分支。

+0

@Karl仍然没有足够的代表评论其他答案,但是你所描述的是我已经明确的步骤回答的,除了你不必手动复制树之外的文件夹。 – Hazok 2011-04-06 04:18:39

+0

Argh,在评论中没有空白符的换行符...... @Karl again;)这是关于依赖关系的一个好处,但做一个樱桃选择并不能保证拉扯依赖关系,特别是如果提交没有很好地组织。此外,由于提问者询问如何拉入特定的wireless_dir文件夹而无需拉入其他任何东西,那么我的猜测是他在wireless_dir文件夹之外做了一些更改,以避免在从wireless_dir提取更改时不想修改它,挑剔的挑战可能会融入到他的变化中。 – Hazok 2011-04-06 04:22:45

0

做到这一点是要合并整个分支最简单的方法,复制你的git目录以外的文件夹,撤销或中止合并,然后将文件夹中复制回来。

但是,你要如果任何更改具有该文件夹之外的依赖项,则会出现问题。你可能想要cherry-pick所有提交的文件夹(从git log subdir)提交的依赖关系。

相关问题