Git拉取时能否忽略部分文件或文件夹?含命令示例疑问
Git拉取时忽略文件/文件夹的正确姿势
嘿,这个问题问得相当实用!我来给你一步步讲清楚:
一、Git拉取时能不能忽略指定文件/文件夹?
答案是可以,但不是直接通过pull命令加参数实现的,得用Git的其他特性来搞定,分两种场景:
场景1:远程仓库里还没有这个文件/文件夹
如果你想让本地和远程都永远忽略它,直接在项目根目录创建/修改.gitignore文件,把要忽略的路径加进去,比如:
/node_modules/
然后把.gitignore提交推送到远程,之后所有人拉取代码时,Git都会自动忽略这个文件夹,不会把它纳入版本控制。
场景2:远程仓库已经存在这个文件/文件夹
这时候.gitignore就不管用了(因为Git只会忽略未被追踪的文件),得用下面这些方法:
- 方法1:让Git假装本地文件未修改
如果你只是不想让本地的这个文件夹被远程的内容覆盖,可以用这个命令:
这样Git会认为这个文件夹没有被修改,拉取时就不会动它。但要注意:如果远程仓库里这个文件夹有更新,拉取时会提示冲突,你得手动处理。git update-index --assume-unchanged node_modules/ - 方法2:从远程仓库彻底移除该文件夹
如果你确定这个文件夹不需要被版本控制,可以让仓库维护者执行以下步骤:
之后所有人拉取代码,这个文件夹就会被忽略,本地的也不会被删除。# 移除Git对该文件夹的追踪,但保留本地文件 git rm -r --cached node_modules/ # 更新.gitignore,加入该文件夹 echo "/node_modules/" >> .gitignore # 提交并推送修改 git add .gitignore git commit -m "Remove node_modules from tracking" git push origin master - 方法3:使用稀疏检出(Sparse Checkout)
如果你只需要拉取仓库的部分内容,不想拉取某个文件夹,可以用稀疏检出功能:
这样Git只会拉取除了# 开启稀疏检出 git config core.sparseCheckout true # 编辑稀疏检出配置文件,指定要保留的路径(!表示排除) echo "/*" >> .git/info/sparse-checkout echo "!/node_modules/" >> .git/info/sparse-checkout # 拉取代码 git pull origin masternode_modules之外的所有内容。
二、你说的git pull origin master -f /node_modules命令可行吗?
很遗憾,这个写法完全无效!
-f是--force的缩写,作用是强制拉取,当本地有冲突时直接覆盖本地内容,但它不能和路径参数一起使用。- Git的
pull命令根本不支持在后面直接指定要忽略的路径,这么写会被Git识别为错误的参数,直接报错。
内容的提问来源于stack exchange,提问作者Alexandre Velia
相关产品推荐
相关产品推荐

