试图在这里解决这个问题。试图将最新的linux 3.0更改(3.0.41)合并到我正在研究的基于HTC源(3.0.8)的内核项目中。我下载了源代码,提交了基本文件,将linux-stable树添加为远程,并尝试将其与'git merge linux-stable / linux-3.0.y'合并。在回复中,我得到了:
错误:未经跟踪的工作树文件'Documentation / DocBook / dvb / dvbstb.pdf'将被合并覆盖。中止
.gitignore中的文件。如果我git add -f那个文件,它只会出现.gitignore中下一个文件的错误。有没有办法让我干净地合并这些没有这些错误?我不想通过提交来提交,因为会有数千个提交要合并。
答案 0 :(得分:0)
首先,如果您可以将HTC源作为现有的git存储库找到,那么您将更多更好。在手动构建的树中缺少适当的git历史记录不可避免地会导致冲突。 HTC源实际上是一个支持vanilla Android的分支,它(可能)是一个支持vanilla Linux的分支,但没有完整的历史,git可以尝试没有比有效的双向合并更好,因为它没有共同的祖先为了做一个正确的三向合并。因此,除非你是一位能够处理这些冲突的经验丰富的内核程序员,否则我预计你会遇到很大困难。
无论如何,如果无法获得完整的历史记录,那么您的树将没有共同的根,因此您需要咨询How do I join two git repos without a common root, where all modified files are the same?。
关于.gitignore
问题,如果您有3.0.8树中忽略但在3.0.41中跟踪的文件,那么听起来您的.gitignore
文件中的git blame .gitignore
文件不匹配每棵树,所以你应该比较它们,试着找出原因,并决定应该追踪什么,不应该追踪什么。 3.0.41树中的.gitignore
可能对此有所帮助。 3.0.41树将是两个存储库中更具权威性的,因为它具有完整的历史记录并且内部是自洽的,因此您可以尝试在初始导入提交之前将其.gitignore
移植到3.0.8树中。另请注意,树中的任何位置都可能有{{1}}个文件,而不仅仅是顶级文件(如果Linux内核执行此操作,我不知道如何)。