Git忽略vendor文件夹

4

我已经将vendor文件夹添加到我的.gitignore文件中,但是每当我运行git status时,它仍然会显示出vendor文件夹被修改了。 以下是我推送代码到存储库的步骤:

  1. Created .gitignore file with following content:

    .idea/*
    log/*
    tmp/*
    
  2. Pushed .gitignore file to repository:

    git add .
    git commit -m "test"
    git push origin master
    
  3. Created new project that contains vendor folder

  4. Pushed project with vendor folder to repository:

    git add .
    git commit -m "test"
    git push origin master
    
  5. Modified .gitignore file to ignore vendor folder:

    .idea/*
    log/*
    tmp/*
    vendor/bundle/*
    vendor/cache/*
    vendor/plugins/*
    
但是无论我在哪里执行 git status,都会显示:
modified:   vendor/bundle/ruby/1.9.1/bundler/gems/jquery-rails-f79e8f178

即使.gitignore文件中包含了vendor文件夹,也不会影响程序的正常运行。

1
可能是重复的问题,与https://dev59.com/pXM_5IYBdhLWcg3wrFMt相似。 - Nitin Jain
2个回答

10

.gitignore 只会忽略新添加的未被跟踪的文件。如果一个文件已经被添加到仓库中,例如在本例中的 vendor 目录中的文件,则它们仍将被跟踪。

你需要从仓库中删除这些 vendor 文件,并将它们添加到 .gitignore 中。可以使用 git rm --cached <file> 命令来实现这一点,它将会从仓库中删除 <file>,但不会从你的工作副本中删除。

下次推送到远程时,通过这种方式删除的文件将会从远程删除。


我正在使用Ruby on Rails作为后端。Vendor文件夹包含JavaScript和样式表文件夹,其中包含jQuery插件和CSS框架,因此我不能忽略整个vendor文件夹。我想忽略除vendors/assets/javascripts和vendor/assets/stylesheet之外的所有文件夹。 - user2588480
嘿Chris - 我找到了解决方案“git update-index --assume-unchanged <file>”,但它是特定于文件的。如果我想对目录执行相同的操作怎么办? - user2588480
你可以使用shell globbing:git update-index --assume-unchanged dir/*,假设你在Linux上使用Bash或类似的东西。我不认为这会在Windows的cmd.exe上起作用,因为那里的globbing是由命令而不是shell执行的。对于更深层次的嵌套,您应该能够使用find,例如find dir/ -type f -exec git update-index --assume-unchanged {} +;。这也假定了Linux或类似的操作系统。我喜欢在运行它之前通过在-execgit之间放置echo来回显此命令,以查看它将要做什么。安全第一! - Chris
“Assume-unchanged” 不应被滥用为忽略机制。它是一种承诺,即“我知道我的文件系统操作很慢,我保证不通过设置这个标志位来更改这些路径……特别地,Git 不会承诺 Git 会始终将这些路径视为未修改——如果 Git 可以确定一个被标记为 assume-unchanged 的路径已经发生了变化而不需要额外的 lstat(2) 成本,那么 Git 保留报告该路径已被修改的权利(…git commit -a 可以自由提交该更改)。” - Chris

-2

你正在错误的方式添加供应商目录。请尝试以下方法。

/log/*.log
/tmp
/vendor

实际上,vendor文件夹包含四个文件夹,分别是assets、bundles、cache和plugin。我不想让git忽略assets文件夹,这就是为什么我在做Vendor/bundle/*、vendor/cache/*和vendor/plugin/*。如果有其他的写法,请告诉我。 - user2588480
请查看https://dev59.com/eW035IYBdhLWcg3wPdkS - Pravin Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接