Git空格/行结尾

时间:2016-02-18 16:16:08

标签: linux git github whitespace line-endings

我将给你一个简化的版本,告诉我现在发生了什么。我尝试了不同的解决方案,但我甚至不确定我的问题来自哪里。

我在我的分支B上做了一些修改,它是上游存储库的分支A的一个分支。然后我尝试拉请求合并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 config的手册页,并阅读了有关空白区域的其他问题,但所提供的解决方案似乎不起作用或适用于我的案例。

如果你有关于如何解决这个问题的想法建议,以后再也没有,请告诉我。

1 个答案:

答案 0 :(得分:2)

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

* text eol=lf

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

接下来,对您更改的文件运行dos2unix实用程序以删除窗口行结尾:

dos2unix file.txt

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

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