Git - 将文件夹与同一文件夹的git存储库进行比较

时间:2014-09-12 03:18:39

标签: git

我有一个包含Ruby on Rails项目的zip文件。我也有这个Ruby on Rails项目的完整Git存储库。 zip文件本质上是完整git存储库的孤立主题分支。如果它被正确地包含在Git存储库中,那么它将与当前master的HEAD修订版后面的master几个版本不同。不幸的是,zip文件不包含Git存储库,只是平面文件,我不得不审核zip文件的更改。毋庸置疑,这是相当繁琐的,所以当我努力工作时,我希望SO可以帮助我找到更好的方法来解决这个问题!

我要求帮助的是:

有没有办法比较不是git存储库的文件夹和git控制下的文件夹?请记住,这些目录都是相同项目的Ruby on Rails项目,只有一个在Git中,而另一个不在,因此它缺少所有可以轻松实现合并的历史上下文。 。

我已经尝试将zip文件内容粘贴到项目主目录的顶部,并检查这种差异。这只会删除近1.5个月的工作,这会产生一个带有大量删除和潜在回归的git差异。当zip文件与master分离并创建一个与该提交不同的分支时,也许有一种方法可以从这些信息中确定?然后我可以合并或改变相关的变化,而不用担心我需要保留的变化。

无论哪种方式,都要提前谢谢。

4 个答案:

答案 0 :(得分:2)

简单解决方案:git clonediff针对非受控目录的克隆回购。

更复杂的解决方案可能涉及将非受控repo引入单独的分支并进行合并。

答案 1 :(得分:1)

我找到了解决这个问题的方法。

我在解压缩文件夹上运行git init,添加并提交了所有文件并创建了"初始提交"。然后我将我的项目文件夹存储库设置为新git存储库的远程。这让我将新代码合并到孤立代码之上:git merge local/HEAD master。一旦我完成了合并并处理了冲突,我就准备好反过来运行这个过程了。

我在指向zip文件夹git存储库的项目目录中添加了一个遥控器,并将其中的tip修订版合并到一个主题分支中。 git merge orphaned_directory/HEAD orphaned_code_branch。我再次处理冲突,小心不要引入回归。

完成后,瞧。测试通过并集成了代码。感谢大家帮助我集体讨论这个问题。

答案 2 :(得分:0)

我很想手动选择一系列可能是叉点的提交(基于日期范围的猜测),然后以编程方式对它们进行区分,并选择产生最少量差异的提交。

git checkout --orphan zip_extract
git rm -rf .

解压缩,git add --all,git commit

然后你需要编写一些

的脚本
for sha in ($git rev-list OLDEST_POTENTIAL_SHA..NEWEST_POTENTIAL_SHA)
do
   git diff [options] ${sha} zip_extract | analysis_script
done

你可以尝试使用某些stat选项来git diff和pipe to awk,或者你可以将完整的diff和pipe转储到wc -l。

乐观地认为其中一个人会比其他人更加正确。然后,您将从该点分支并提取到那里(或从孤立分支合并),然后尝试将其合并到master。

祝你好运。

答案 3 :(得分:0)

您是否尝试过git bisect ??。这将帮助您找到您正在寻找的提交。在你的repo开始,从HEAD到一些提交,你确定它在非git文件夹中。

在每个二等分之后,您可以查看有多少文件不同(使用某些目录比较实用程序)和标记为平分为好或坏。 并且你可以在提交时归零你的git repo分歧了。 示例命令将是这样的

git bisect start HEAD some_old_commit_id
git bisect bad
git bisect good
git bisect bad