Windows 如何在Git中重新下载整个存储库

Windows 如何在Git中重新下载整个存储库,windows,git,repository,Windows,Git,Repository,我们是在Windows上工作的用户团队,我们的远程设备在Bitbucket(Linux/UNIX)中,我们的应用程序正在部署到Linux机器上。我们没有注意到行尾,直到有一天我们发现,笔记本电脑上的.sh脚本有CRLF行尾。我们决定将core.autocrlf设置为false,这样远程计算机上的行尾和Windows笔记本电脑上的行尾之间就没有区别了。但是,此选项不会更改本地源代码中的CRLF 有没有办法,如何告诉Git更新所有文件,以便CRLF在远程服务器上被更改为LF?某种形式的重新下载,甚至

我们是在Windows上工作的用户团队,我们的远程设备在Bitbucket(Linux/UNIX)中,我们的应用程序正在部署到Linux机器上。我们没有注意到行尾,直到有一天我们发现,笔记本电脑上的.sh脚本有CRLF行尾。我们决定将core.autocrlf设置为false,这样远程计算机上的行尾和Windows笔记本电脑上的行尾之间就没有区别了。但是,此选项不会更改本地源代码中的CRLF


有没有办法,如何告诉Git更新所有文件,以便CRLF在远程服务器上被更改为LF?某种形式的重新下载,甚至可以下载未更改的文件。

我会选择grep+xargs+sed

grep -rlI "\r\n" * | xargs -I{} sed -i.bak -e 's/\r//g' {}
grep将列出具有\r\n的非二进制文件,sed将删除\r\n


我没有试过,所以可能需要一点时间

不,没有办法告诉git为您更改所有文件。Git只存储文件。但是,您可以克隆您的repo,在本地更新您的文件,然后将更改推回

从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将把主分支重置为刚刚获取的分支。
--hard
选项更改工作树中的所有文件,以匹配
源代码/master
中的文件(或指定的任何分支)


注意:这将覆盖本地文件。确保隐藏任何本地更改,因为这将覆盖任何尚未推送的内容。不在repo中的文件将保持不变,但repo中的任何内容都将被获取的内容覆盖,本地(未推送)提交将丢失。

注意:仅适用于GNU sed。不确定OP的Windows机箱中安装了什么版本的sed。如果任何文件名有特殊字符,如换行符或空格,这也可能会中断。谢谢您的回答。但是,我不需要更改文件并将其推送到remote,它们在remote上已经有了正确的行尾。唯一的问题是,这些文件位于当前使用CRLF克隆的本地存储库中。我问是否有一个选项可以在core.autocrlf设置为false后用LF下载它们。@Michal-啊,我明白你的意思了。用我认为您正在寻找的内容更新了我的答案。删除本地存储库并再次克隆它们是否太麻烦?