git部分文件不想提交解决方案

这篇具有很好参考价值的文章主要介绍了git部分文件不想提交解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正确的做法应该是:git rm --cached logs/xx.log,然后更新 .gitignore 忽略掉目标文件,最后 git commit -m "We really don't want Git to track this anymore!"

具体的原因如下:

被采纳的答案虽然能达到(暂时的)目的,但并非最正确的做法,这样做是误解了 git update-index 的含义,而且这样做带来的最直接(不良)后果是这样的:

  1. 所有的团队成员都必须对目标文件执行:git update-index --assume-unchanged <PATH>。这是因为即使你让 Git 假装看不见目标文件的改变,但文件本身还是在 Git 的历史记录里的,所以团队的每个人在 fetch 的时候都会拉到目标文件的变更。(但实际上目标文件是根本不想被 Git 记录的,而不是假装看不见它发生了改变)

  2. 一旦有人改变目标文件之后没有 git update-index --assume-unchanged <PATH> 就直接 push 了,那么接下来所有拉取了最新代码的成员必须重新执行 update-index,否则 Git 又会开始记录目标文件的变化。这一点实际上很常见的,比如说某成员换了机器或者硬盘,重新 clone 了一份代码库,由于目标文件还在 Git 的历史记录里,所以他/她很可能会忘记 update-index。

为什么会这样?答案就在 Git 的 man pages 里:

首先,git update-index 的定义是:

Register file contents in the working tree to the index(把工作区下的文件内容注册到索引区)

这句话暗含的意思是:update-index 针对的是 Git 数据库里被记录的文件,而不是那些需要忽略的文件。

接着看关于 --assume-unchanged 的几句相关的描述:

When the "assume unchanged" bit is on, Git stops checking the working tree files for possible modifications, so you need to manually unset the bit to tell Git when you change the working tree file. This is sometimes helpful when working with a big project on a filesystem that has very slow lstat(2) system call (e.g. cifs).

大致意思是:

应用了该标识之后,Git 停止查看工作区文件可能发生的改变,所以你必须 手动 重置该标识以便 Git 知道你想要恢复对文件改变的追踪。当你工作在一个大型项目中,这在文件系统的 lstat 系统调用非常迟钝的时候会很有用。

我们知道 Git 不仅仅是用来做代码版本管理的,很多其他领域的项目也会使用 Git。比如说我公司曾经一个客户的项目涉及到精密零件图纸文档的版本管理,他们也用 Git。有一种使用场景是对一些体积庞大的文件进行修改,但是每一次保存 Git 都要计算文件的变化并更新工作区,这在硬盘慢的时候延迟卡顿非常明显。

git update-index --assume-unchanged 的真正用法是这样的:

  1. 你正在修改一个巨大的文件,你先对其 git update-index --assume-unchanged,这样 Git 暂时不会理睬你对文件做的修改;

  2. 当你的工作告一段落决定可以提交的时候,重置改标识:git update-index --no-assume-unchanged,于是 Git 只需要做一次更新,这是完全可以接受的了;

  3. 提交+推送。

另外,根据文档的进一步描述:

This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files).

这段描述告诉我们两个事实:

  1. 虽然可以用其来达成楼主想要的结果,但这是不讲究的做法(coarse);

  2. 同样的事情更应该用 .gitignore 文件来实现(针对未追踪的文件)。

随之而来的问题是:为什么我增加了 .gitignore 里的规则却没有效果?

这是因为我们误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。

之所以你的规则不生效,是因为那些 .log 文件曾经被 Git 记录过,因此 .gitignore 对它们完全无效。这也正是开头那段简短答案所做的事情:

  1. 从 Git 的数据库中删除对于该文件的追踪;

  2. 把对应的规则写入 .gitignore,让忽略真正生效;

  3. 提交+推送。

只有这样做,所有的团队成员才会保持一致而不会有后遗症,也只有这样做,其他的团队成员根本不需要做额外的工作来维持对一个文件的改变忽略。

最后有一点需要注意的,git rm --cached 删除的是追踪状态,而不是物理文件;如果你真的是彻底不想要了,你也可以直接 rm+忽略+提交。文章来源地址https://www.toymoban.com/news/detail-434771.html

到了这里,关于git部分文件不想提交解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在提交文件到gitee远程仓库时报用户名密码错误 fatal: Authentication failed for ‘https://gitee.com/xxx/xxx.git 解决方案来啦 亲测有效

    在提交文件到gitee远程仓库时,突然出现一个弹框输入用户名 密码 很懵逼 输入了结果是错误的 D:文件名git push -u origin \\\"master\\\" remote: [session-fa417d86] Akiko: Incorrect username or password (access token) fatal: Authentication failed for \\\'https://gitee.com/xxx/文件名.git/\\\'      此刻如果再提交一遍 还是会

    2024年02月16日
    浏览(61)
  • IDEA 出现问题:git提交commit时Perform code analysis卡住解决方案(git commit提交很慢)

    git提交commit时Perform code analysis卡住很久 解决方案一 1、打开 IntelliJ IDEA,进入 File - Settings(或者使用快捷键 Ctrl+Alt+S)。 2、在弹出的 Settings 窗口中,找到 Version Control - Commit Dialog 选项。 3、在右侧的窗口中,找到 Perform code analysis 选项,并取消勾选该选项。然后单击 OK 按钮保

    2024年01月16日
    浏览(70)
  • 关于git提交代码时报错Committer identity unknown的解决方案

    今天安装好git后,创建新项目,当git上传提交时出现了一个问题,如下: 解释 Commit failed - exit code 128 received, with output: \\\'*** Please tell me who you are. Run git config --global user.email \\\"you@example.com\\\" git config --global user.name \\\"Your Name\\\" to set your account\\\'s default identity. Omit --global to set the identity o

    2024年04月16日
    浏览(37)
  • git提交到远程仓库 Git HEAD detached from origin(冲突解决后无法正常push) 问题的解决方案

    目录 一、Git提交代码的流程 二、将本地项目发布到gitee上 将本地代码库与远程代码库相关联 强制把远程仓库代码拉取到到当前分支上面。ps:如果仓库为空这一步可以跳过 三、git提交代码--修改提交的地址 四、获取密钥 Git HEAD detached from origin(冲突解决后无法正常push) 问题

    2024年02月03日
    浏览(70)
  • IDEA 出现问题:git提交commit时Perform code analysis卡住解决方案

    ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆 ❤️技术活,该赏 ❤️点赞 👍 收藏 ⭐再看,养成习惯 Intellij IDEA使用教程相关系列 目录 git提交commit时Perform code analysis卡住很久

    2024年02月11日
    浏览(47)
  • git提交的时候出现异常“bad object HEAD”的另一种解决方案

    Git仓库是目前很主流的代码管理工具,一旦被损坏或出现异常,内心想直接吐血。 当进入到Git仓库执行命令: git status 显示: fatal: bad object HEAD 在此尝试用git checkout git reflog 等命令希望能恢复,但都是提示错误。在网上搜索大部分看到的是如下的解决方式: 但是我的代码分

    2024年02月02日
    浏览(66)
  • Git提交 ssh: connect to host github.com port 22: Connection timed out解决方案

    你们好,我是金金金。 之前都是好好的,不知道今天为什么提交代码就这样了 根据英文可以看出,ssh端口号被拒绝了,22号端口不行,那就换一个端口 ssh端口被拒绝 找到.ssh文件,在下面创建一个config文件,然后记事本打开写入以下内容 成功提交 主要是ssh 22端口被拒绝,我

    2024年01月22日
    浏览(54)
  • git上传对象文件错误解决方案

    ​时隔一个星期, 当我再次完成开发之后, 准备将代码上传, 却出现了一个上传代码的错误, 记录一下错误和解决方案 解决方案 : 运行 git fsck --full 在.git目录下find . -type f -empty -delete -print 会删除全部空文件 再次运行 git fsck --full , 还是有错,head指向元素不存在,是之前一个空文

    2024年02月06日
    浏览(45)
  • Git上传文件不能超过100M 解决方案

    上传项目到Git上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小 不能超过100M 。如果需要上传超过100M的文件,就需要我们自己去修改配置。 首先,打开 终端 ,进入项目所在的文件夹; 输入命令: 此命令的目的是设置最大文件上限改为 500M (5

    2024年02月11日
    浏览(54)
  • git忽略文件.gitignore失效分析与解决方案

    git忽略文件.gitignore失效分析与解决方案 最近学习谷粒商城的时候使用了人人快速开发平台,但是我提交到gitee的文件希望不提交人人项目,但是由于事先已经将人人项目纳入了版本控制,此时在.gitignore中添加人人项目,gitignore就失效了。 此时,我们可以采用以下两种方式让

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包