Diffing between two entire directories/projects in hg or git?
我继承了最初存储在CVS中的项目以及所有修订版。 我做了很多编辑,我试图比较我在原始目录中所做的所有更改,关于添加的新文件与旧文件。
是否有某种实用的hg / git,我可以做一个树差异,或者那种性质的东西? 那么说,新添加的文件,删除的文件之间有标记,我要求的太多了吗?
只需从两个任意文件或目录中以git的diff格式创建diff补丁,而不需要任何花哨的存储库或版本控制:
1 | git diff --no-index some/path other/path >> some_filename |
Jakub Nar?bski对knittl答案的评论暗示了答案......为了简单起见,这就是完整的命令。
为方便复制和粘贴,如果您已经
1 | git diff --no-index a b >> patch |
从
git diff [--options] [--] [ ...] [...]
If exactly two paths are given, and at least one is untracked, compare the two files / directories. This behavior can be forced by--no-index .BLOCKQUOTE>
如果您想在两个不同的存储库中比较两个版本(例如两个标记版本或两个分支),您可以使用Git Wiki上的GitTips页面中描述的技巧,在"如何比较两个本地存储库"下。
假设您在一个存储库中,第二个存储库位于
/path/to/repo 中,因此如果它是非裸存储库,则其GIT_DIR为/path/to/repo/.git ,您可以执行以下操作:
1
2 $ GIT_ALTERNATE_OBJECT_DIRECTORIES=/path/to/repo/.git/objects \
git diff $(git --git-dir=/path/to/repo/.git rev-parse --verify A) B其中A和B是您要比较的修订版。当然,您也可以在上面的表达式中指定路径限制器。
说明:
GIT_ALTERNATE_OBJECT_REPOSITORIES 变量可用于使git命令连接两个存储库的对象数据库。git --git-dir=... rev-parse ... 用于将作为参数提供的存储库中的名称(扩展SHA-1表达式)转换为唯一的SHA-1标识符git-dir 选项。$( ... ) 构造在命令行中调用给定命令的结果。git diff 用于比较两个修订版(其中一个来自备用对象存储库)。替代解决方案是使用
git remote add (和git fetch )将其他存储库导入到给定的存储库中。然后你就可以在本地获得所有东西,并且可以在单个存储库中进行比较。
Is there some sort of utility for hg/git where I can do a tree diff... ▼显示o that say, there's a mark between newly added files, deleted files... [emphasis added]
是。我们可以
git diff 当前目录对另一个目录和......标记添加,删除和修改的文件:
1 git diff --name-status --no-index ./ path/to/other/dir...仅显示添加的文件:
1 git diff --diff-filter=A --name-status --no-index ./ path/to/other/dir...仅显示已删除的文件:
1 git diff --diff-filter=D --name-status --no-index ./ path/to/other/dir...仅显示已修改的文件:
1 git diff --diff-filter=M --name-status --no-index ./ path/to/other/dir另见:https://git-scm.com/docs/git-diff
我真的不明白你想要什么,但对你来说不够
diff -ur 吗?它甚至可以在没有任何版本控制的目录上工作。
它不是特定于git的,但作为Windows的一般差异实用程序,我真的很喜欢WinMerge。
git diff 正是如此。但它只适用于git项目。
hg diff ,svn diff 漂亮的每个版本控制系统都可以区分目录树