为什么 git 在 Windows 系统上无法正常工作?

问题描述 投票:0回答:1

我正在 Windows 系统上开发一个 monorepo 项目。我发现

git
命令无法有效工作。我目前面临两个问题:

  1. .gitignore
    文件无法工作。 我试图忽略项目中的
    node_modules
    文件,但它不起作用,这是文件内容
    .idea
    .vscode
    node_modules
    build
    dist
    .next
    .env
    .nx/cache
    

我曾尝试添加

.env
文件进行测试,但是
.env
文件也被跟踪,所以看起来
.gitignore
文件不起作用。

  1. 当我使用
    git add .
    时,
    git
    会报告名为
    warning: LF will be replaced by CRLF.
    的警告。我使用命令
    git config --global core.autocrlf false
    修改配置,但不起作用,警告仍然存在。我使用
    git config --global -l
    来检查配置,
    core.autocrlf
    已经更改为
    false

如何解决这两个问题?

windows git monorepo
1个回答
0
投票

我建议您采取以下步骤来缓解这种情况:

解决您的

.gitignore
问题:

  1. 在您将这些文件添加到
    .gitignore
    之前,Git 可能已经对其进行了跟踪。要删除这些缓存文件而不在本地删除它们,请使用:
git rm -r --cached .
git add .
git commit -m "Apply .gitignore rules"
  1. 确保

    .gitignore
    文件格式正确。路径应该相对于根目录或子文件夹的
    .gitignore
    文件。添加
    /node_modules
    (带有前导斜杠)可以帮助指定它是根级别的 node_modules 目录,以防
    monorepo
    设置中存在多个 node_modules 目录。

  2. 如果

    node_modules
    已经提交并推送到远程存储库,之后将其添加到
    .gitignore
    不会自动阻止 Git 跟踪它。 如果是这种情况,那么您必须显式删除节点模块。

为此执行以下步骤:

git rm -r --cached node_modules
git add .gitignore # make sure you add node_modules to gitignore now before pushing.
git commit -m "Remove node_modules from tracking and add to .gitignore"

然后,将更改推送到您的分支

git push origin <branch-name>

有关 LF 和 CRLF 行结尾的警告:

即使将 core.autocrlf 设置为 false,Windows 上的行结束警告也可能发生。

  1. 有时,尽管设置了
    core.autocrlf
    ,您可能需要直接在
    .gitattributes
    文件中重新配置 Git 的行结尾设置,以便更好地进行控制。使用以下行在项目根目录中创建或更新
    .gitattributes
    文件,以在所有平台上强制使用 LF 结尾:
* text=auto eol=lf

.gitattributes 中的此设置会强制存储库中以 LF 结尾,并防止 CRLF 行结尾在 Windows 上引起警告。

  1. 有时,存储库中的现有文件具有混合行结尾,这可能会触发警告。您可以在编辑器中手动更改它们或使用 Git 进行转换:
git add --renormalize .
git commit -m "Normalize line endings"

--renormalize
选项强制 Git 重新评估所有文件的行结尾并应用
.gitattributes
设置。

通过这些更改,.gitignore 应该正确忽略您指定的文件,并且在处理行结尾时不应该遇到 CRLF 警告。

© www.soinside.com 2019 - 2024. All rights reserved.