我们正在处理一个项目,并使用Git管理我们的代码版本。我们每个功能有一个分支,我们正在维护的每个版本有一个分支...问题是,我们使用命令行将项目连接到git(Eclipse没有提供足够的功能来正确执行此操作),但是通常我们使用Eclipse来提交, 推... 此外,有时Eclipse不想让我们推送,因此我们不得不在命令行中推送。
这种情况导致远程上的某些文件以crlf行结尾,而另一些文件以lf行结尾。所有由Eclipse和Terminal导致的libne结尾行为不同所导致的后果,我意识到为时已晚。我现在正在寻找一种简单,正确的方法来使所有文件自动为true,并确保所有git客户端上的Terminal和Eclipse都具有相同的行为(基于终端的行为)。
(对不起,英语不好,谢谢您)!
-编辑-
我应该确定我正在寻找一种解决方案,该解决方案也适用于转换现有文件,将远程文件转换为lf上的lf和库中的crlf的
答案 0 :(得分:2)
您可以尝试使用此条目在存储库中添加和提交.gitattributes
文件。
* text eol=crlf
(参考: https://help.github.com/articles/dealing-with-line-endings/)
Git总是在结帐时将行尾转换为CRLF。你应该 将此文件用于必须保留CRLF结尾的文件,即使在OSX或Linux上也是如此。
插图:
考虑现有回购中有2个文件(例如test-repo
),每个文件中只有一行。
file_a.txt
file_b.txt
将文件结尾验证为\n
。
test-repo (master)$ od -c file_a.txt
0000000 T h i s i s f i l e _ a \n
0000017
test-repo (master)$ od -c file_b.txt
0000000 T h i s i s f i l e _ b \n
0000017
在存储库中添加一个.gitattributes
文件。
test-repo (master)$ vim .gitattributes
添加条目。
* text eol=crlf
提交并推动.gitattributes
。
test-repo (master)$ git add -A
warning: LF will be replaced by CRLF in .gitattributes.
The file will have its original line endings in your working directory.
test-repo (master)$ git commit -m "Adding .gitattributes file"
test-repo (master)$ git push
添加一个新文件,然后在其中输入一行文本。
test-repo (master)$ vim file_c.txt
验证文件结尾为\n
。
test-repo (master)$ od -c file_c.txt
0000000 T h i s i s f i l e _ c \n
0000017
提交并推送添加的文件。
test-repo (master)$ git add file_c.txt
warning: LF will be replaced by CRLF in file_c.txt.
The file will have its original line endings in your working directory.
test-repo (master)$ git commit -m "Added file_c.txt"
test-repo (master)$ git push
将存储库克隆到磁盘上的另一个目录(例如,名称为temp_dir
)。请注意,现在以\r \n
代替\n
。
temp_dir/test-repo (master) $ od -c file_a.txt
0000000 T h i s i s f i l e _ a \r \n
0000020
temp_dir/test-repo (master) $ od -c file_b.txt
0000000 T h i s i s f i l e _ b \r \n
0000020
temp_dir/test-repo (master) $ od -c file_c.txt
0000000 T h i s i s f i l e _ c \r \n
0000020