我正在尝试自动化项目中的冗余部署过程。为了实现这一点,我试图使用“ git diff”来获得两个分支之间的差异。通过某种方式,我能够使用以下命令来实现这一点。
git diff <BRANCH_NAME1> -- common_folder_name/ <BRANCH_NAME2> -- common_folder_name/ > toStoreResponse.txt`
现在我得到的响应如下所示:
diff --git a / cmc-database / common / readme.txt b / cmc-database / common / readme.txt
索引7820f3d..5a0e484 100644
--- a / cmc-database / common / readme.txt
+++ b / cmc-database / common / readme.txt
@@ -1 +1,5 @@
-此文件夹包含常用的数据库脚本。
\文件末尾没有换行符
+此文件夹包含常见的数据库脚本。
+测试站
\文件末尾没有换行符
因此,在上面的响应中,仅是换行的行/文本或两个分支之间的差异是TEST STTESA
,我只想使用shell / git将那么多的文本存储在某些不同的文本文件中方式。
即名为readme.txt
的文件,它将仅包含TEST STTESA
的内容。
解决方案:
我找到了一种解决方法,可以过滤响应-但是,这并不是我所寻找的100%。命令如下:
git diff <Branch_Name1> -- common-directory/ <Branch_Name2> -- common-directory/ | grep -v common-directory | grep -v index | grep -v @ | grep -v \\
以上命令返回以下响应:
-此文件夹包含常用的数据库脚本。
+此文件夹包含常见的数据库脚本。
+测试站
但是我只希望存储差异TEST STTESA
答案 0 :(得分:1)
您可以轻松地意识到,您的解决方案并非每次都有效。 grep -v
部分使其无法携带。
这是一个“ step0”解决方案:您希望匹配以“ +”或“-”开头的行,然后匹配“ +”或“-”的行。为此使用grep
!
git diff ... | grep "^+[^+]\|^-[^-]"
一些解释:
首先,中间的\|
部分是一个“或”语句。
然后,每一面都以^
开始,该行指向行的开头。最后,在第一个字符之后,我们想使用[^...]
语法拒绝某些字符。
上面的行翻译为英语,表示“运行差异,并找到所有以+
开头,后跟不是+
或以{{ 1}},然后输入非-
。
如果您删除以-
开头的行,这将无法正常工作。也不要添加以-
开头的行。
对于这样的场景,我会喜欢+
并为其中一些添加git diff --color
来有趣。
答案 1 :(得分:1)
-diff-filter = [ACDMRTUXB *]
仅选择符合以下条件的文件