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

Mic*_*hal 3 windows git repository

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

有什么办法,如何告诉 Git 更新所有文件,以便 CRLF 将更改为 LF 就像它在 Remote 上一样?某种重新下载,甚至会下载未更改的文件。

gho*_*oti 5

不,没有办法告诉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
Run Code Online (Sandbox Code Playgroud)

如果您找不到dos2unix,您可以使用许多其他工具复制该功能,这些工具的答案已在此处或通过您喜欢的搜索引擎现成可用。


更新

如果您真正要问的是“如何刷新存储库的本地副本,覆盖不匹配的文件”,那么我相信以下方法可能有效:

git fetch --all
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

或者,如果您在不同的分支上:

git reset --hard origin/branchname
Run Code Online (Sandbox Code Playgroud)

git fetch重新下载远程最新的没有合并或重订(如果你是这将完成git pull)。

git reset将重置主分支whataver只是牵强。该--hard选项更改工作树中的所有文件以匹配origin/master(或您指定的任何分支)中的文件。

注意:这会覆盖本地文件。确保隐藏任何本地更改,因为这将覆盖尚未推送的任何内容。不在回购文件将保持不变,但任何在回购协议将被覆盖与任何被取出,和当地(unpushed)款将丢失。