Git whitespace/line 结束

Git whitespace/line ending

我将向您简要说明发生的事情以及我现在所处的位置。我尝试了不同的解决方案,但我什至不确定我的问题从何而来。

我对我的分支 B 做了一些修改,它是上游存储库分支 A 的一个分支。然后我尝试Pull Request合并A和B。

创建此 PR 时出现一些冲突,因此我尝试解决它们。然而,通过尝试这样做,我意识到感谢 git diff 某些文件显示为所有行已删除并重新添加: @@ -977,16 +977,16 @@ p#splash-text span {

举一个最小的例子,我中止了合并,然后从上游 A 拉入一个新的分支 C。

现在我在 C 上,如果我打开文件我遇到了问题,只是保存它而不修改我得到以下 git diff:

@@ -977,16 +977,16 @@ p#splash-text span {

 .other div#carshare .box.active {
     background-color: green;
-}
-
-.other div#bluephone .box.active {
-    background-color: #2880ca;
-}
-
-.box_col {
-    vertical-align: middle;
-}
-
+}^M
+^M
+.other div#bluephone .box.active {^M
+    background-color: #2880ca;^M
+}^M
+^M
+.box_col {^M
+    vertical-align: middle;^M
+}^M
+^M
 .leaflet-control-locate a {
        padding: 3px 0px 0px 0px;
 }

我阅读了很多关于行尾的内容,发现“^M”是由 windows 放置的行尾,但其他贡献者在 Linux 下工作,所以我有点迷茫为什么他最近做的修改在我本地有'^M'

因为我在 Linux 我尝试了以下操作: git config --global core.autocrlf input 我也尝试将其设置为 true 但它并没有解决我的问题。

其他贡献者没有为 autocrlf 设置任何内容,所以这可能是问题所在?

现在,如果我做一个小修改,但是 运行 git diff --ignore-space-at-eol 我得到以下结果:

@@ -697,7 +697,7 @@ div#otp-planner-optionsWidget-scollPanel {
    padding:10px;
     }

    -.otp-layerView-inner fieldset { border-top:1px solid #000; }
    +.otp-layerView-inner fieldset { border-top:1px solid gray; }^M
     .otp-layerView-inner fieldset legend { text-align:center; }

所以我想提交并推送然后 PR 此更改,但我不希望任何行结尾也跟随。

有没有办法只提交这个单一的更改,而不是行尾引入的所有更改?

或者我怎么能没有这些变化呢?

我阅读了 git 配置的手册页并阅读了关于 white space 的其他问题,但给出的解决方案似乎不起作用或不适用于我的情况。

如果您对如何解决这个问题有想法建议并且以后不会再有它,请告诉我。

.gitattributes 文件可以帮助解决这种情况。要保持一致的 unix 行结尾,请使用:

* text eol=lf

我建议实际将 .gitattributes 文件检查到您的存储库中,以便每个人都有一致的行尾。

接下来,运行 dos2unix 实用程序对您修改过的文件删除 windows 行结尾:

dos2unix file.txt

最后,以交互方式将您的更改重新定位到您尝试贡献的分支,并强制推送以更新您的拉取请求:

git fetch
git rebase -i origin/A
git push -f origin C