我们是在Windows上工作的用户团队,我们的Remote是Bitbucket(Linux / UNIX),我们的应用程序正在部署到Linux机器上。我们没有注意行结尾,直到有一天我们发现,我们的笔记本电脑上的.sh脚本有CRLF行结尾。我们决定将core.autocrlf设置为false,因此在我们的Windows笔记本电脑上远程和行结尾的行结尾之间没有区别。但是,此选项不会更改本地源代码中的CRLF。
有没有办法,如何告诉Git更新所有文件,以便CRLF将更改为LF,因为它在Remote上?某种重新下载,甚至可以下载未更改的文件。
答案 0 :(得分:2)
不,没有办法告诉 git 为您更改所有文件。 Git只是存储文件。但您可以克隆您的存储库,在本地更新您的文件,然后再推送更改。
从unix风格的shell中,您可以使用常用工具dos2unix
轻松进行转换。这样的事情可能会飞:
git clone bitbucket:path/to/repo foo
cd foo
find . -type f -name \*.sh -exec dos2unix {} {} \;
git add .
git commit -m 'convert line endings on .sh files'
git push
如果找不到dos2unix
,您可以使用许多其他工具复制该功能,这些工具已在此处或通过您最喜爱的搜索引擎随时可用。
如果您真正问的是“我如何刷新回购的本地副本,覆盖错误匹配的文件”,那么我相信以下内容可能会有效:
git fetch --all
git reset --hard origin/master
或者如果你在不同的分支上:
git reset --hard origin/branchname
git fetch
从远程重新下载最新版本而没有合并或变基(如果你去git pull
就会这样做。)
git reset
会将主分支重置为刚获取的whataver。 --hard
选项会更改工作树中的所有文件,以匹配origin/master
(或您指定的任何分支)中的文件。
注意:这会覆盖本地文件。确保存储任何本地更改,因为这将覆盖尚未推送的任何内容。不在repo中的文件将保持不变,但是repo中 的任何内容都将被提取的内容覆盖,并且本地(未刷新)提交将丢失。
答案 1 :(得分:1)
我会选择grep + xargs + sed
grep -rlI "\r\n" * | xargs -I{} sed -i.bak -e 's/\r//g' {}
grep将列出具有\ r \ n的非二进制文件,sed将删除\ r
我没试过,所以可能需要一些推文!