当我想得到我已经改变的文件列表时,我使用这个命令:
git diff --name-only
Run Code Online (Sandbox Code Playgroud)
但很多时候,我得到了许多我现在不关心的文件.例如,如果我上传到我的PHP服务器,我通常只需要.php文件列表.我试过这个:
git diff --name-only **/*.php
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,它只显示第一个子目录中的文件.所以看起来它并不是将双星解释为递归.
任何的想法?
与此问题非常相似的问题:在Git中仅导出具有文件夹结构的已修改和添加的文件
给定的答案似乎只输出给定提交中更改的文件($ commit_id):
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_idRun Code Online (Sandbox Code Playgroud)
我想获取commit1和commit2之间的修改文件列表......这可能吗?
我几乎不好意思问,但是当我git diff在特定文件上运行时,它只显示前26行左右的变化.
是否有一个页面向下命令将显示其余的更改?
目前我正在使用gitolite来管理我的存储库和用户.每次推送后我都成功设置了通知邮件.命令是
chmod a+x post-receive-email
cd /path/to/your/repository.git
ln -sf /usr/share/doc/git-core/contrib/hooks/post-receive-email hooks/post-receive
Run Code Online (Sandbox Code Playgroud)
通知邮件仅包含更改摘要.我想在该推送中添加每个修改文件的更改行.我知道编辑该post-receive-email文件并且必须使用git-diff命令.我的问题是
什么是我必须使用的确切git-diff命令..?我在那个post-receive-email文件中添加该命令的地方..?有没有任何配置可用于gitolite ..?
我正在关注Git配置页面中的文档并尝试将其应用到我的Windows 7环境中.当我运行说"git diff file0"时,我在P4Merge中收到错误:
Errors: '/tmp/cH9ccM_file0' is (or points to) an invalid file.
Run Code Online (Sandbox Code Playgroud)
这是一个真实的陈述.我没有名为"/ tmp"的目录.我已经检查了C:\ tmp,C:\ cygwin\tmp和%PROGRAMFILES%\ Git\tmp.
有关如何将此目录更改为我所拥有的内容的任何想法?
编辑:
附加信息.最终,我正在尝试让WinMerge(或任何外部程序)工作.我之前选择使用P4Merge,因为我无法让WinMerge工作,所以我决定使用上述文章中使用的程序.
以下是我的.gitconfig的相关部分:
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false
[diff]
external = extDiff
Run Code Online (Sandbox Code Playgroud)
extDiff脚本:
#!/usr/bin/sh
# extDiff
# Wrapper for using an external diff tool in Git
echo "File 1: $2"
echo "File 2: $5"
/usr/local/bin/extMerge "$2" "$5"
Run Code Online (Sandbox Code Playgroud)
extMerge脚本:
#!/usr/bin/sh
echo $*
/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe $*
Run Code Online (Sandbox Code Playgroud)
因此,如果我更改名为index.html的文件,并运行git diff,则结果如下:
File …Run Code Online (Sandbox Code Playgroud) 我想在两次提交之间更改(添加,修改或删除)文件的路径.
从命令行,我只是写
git diff --name-only abc123..def456
Run Code Online (Sandbox Code Playgroud)
使用JGit执行此操作的等效方法是什么?
我想将我的外部giff diff工具设置为SmartGit,然后在shell中输入git diff,显示SmartGit diff窗口.可能吗?
我知道如何设置外部差异工具.我的问题是,是否存在SmartGit的可执行文件,仅显示差异,或者是否有其他方法可以执行此操作.
例如,本文详细解释了虚拟变量的diff算法,但是实际使用的算法是什么?
有关常识,请参见diff2&的规范diff3。
diff2:http://www.xmailserver.org/diff2.pdfdiff3:http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf我知道您可以配置git使用diff2或diff3
git config --global merge.conflictstyle diff3
Run Code Online (Sandbox Code Playgroud) 我有2个字符串,我想要它们之间的git diff。我可以创建file1并添加string1作为其内容。
然后,我可以创建file2并添加string2作为其内容。然后我可以git diff file1和file2。
但是,鉴于我将字符串作为字符串(而不是文件内容),可以避免这些繁琐的步骤吗?有没有更简单的方法?
就像是:
git diff "my first string" "my second string" # obviously does not work
Run Code Online (Sandbox Code Playgroud) git diff的输出包含一个标题,如下所示:
index f8fdb16de,78132574a..000000000
Run Code Online (Sandbox Code Playgroud)
在git help diff,这解释如下:
2. It is followed by one or more extended header lines (this example shows a merge with two parents):
index <hash>,<hash>..<hash>
mode <mode>,<mode>..<mode>
new file mode <mode>
deleted file mode <mode>,<mode>
Run Code Online (Sandbox Code Playgroud)
我想使用git diff来创建补丁,我希望这些补丁具有可预测的格式,以便进行比较.为此,我需要一个固定长度的"index .."标题中的哈希.
如何控制这些哈希的长度?
我试过--abbrev = 7,但似乎没有效果.
我仍然看到我的补丁更新如下:
-index 52a2a35..7813257 100755
+index 52a2a357e..78132574a 100755
Run Code Online (Sandbox Code Playgroud)