你可以在 git commit 期间更改文件内容吗?

2023-11-30

我保留在我的东西之一在 GitHub 上打开小说 is a 单词列表我想自动设置第一行,即字典中的单词数。我的第一个选择是编写一个预提交挂钩,用于读取文件、计算单词数、重写第一行并再次写回。这是代码

PRE_COMMIT {
  my ($git) = @_;
  my $branch =  $git->command(qw/rev-parse --abbrev-ref HEAD/);
  say "Pre-commit hook in $branch";
  if ( $branch =~ /master/ ) {
     my $changed = $git->command(qw/show --name-status/);
     my @changed_files = ($changed =~ /\s\w\s+(\S+)/g);
     if ( $words ~~ @changed_files ) {
       my @words_content = read_file( $words );
       say "I have $#words_content words";
       $words_content[0] = "$#words_content\n";
       write_file( $words, @words_content );
     }
   }
};

但是,由于文件已经暂存,我收到此错误

错误:您对以下文件的本地更改将被覆盖 通过结帐: 文本/单词.dic 请提交您的更改或隐藏它们 在你可以切换分支之前。 正在中止

将其作为提交后挂钩并在下一次提交时进行更改可能会更好吗?或者做一些完全不同的事情?一般问题是:如果您想在提交期间处理和更改文件的内容,正确的方法是什么?


实际提交陷入困境git commit是预提交挂钩完成后索引中的任何内容。这意味着你can更改预提交挂钩中的文件,只要您git add他们也是。

这是我的示例预提交挂钩,从 .sample 修改而来:

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# [snipped much of what used to be in it, added this --
#  make sure you take out the exec of git diff-index!]

num=$(cat zorg)
num=$(expr 0$num + 1)
echo $num > zorg
git add zorg
echo "updated zorg to $num"
exit 0

进而:

$ git commit -m dink
updated zorg to 3
[master 76eeefc] dink
 1 file changed, 1 insertion(+), 1 deletion(-)

但请注意一个小缺陷(不适用于您的情况):

$ git commit
git commit
updated zorg to 4
# On branch master
# Untracked files:
[snip]
nothing added to commit but untracked files present (use "git add" to track)
$ git commit
updated zorg to 5
# Please enter the commit message for your changes. Lines starting
[snip - I quit editor without changing anything]
Aborting commit due to empty commit message.
$ git commit
updated zorg to 6
# Please enter the commit message for your changes. Lines starting

基本上,因为预提交挂钩更新并且git adds,即使我实际上没有在这里进行提交,文件也会不断增加。

[Edit2021 年 8 月:我需要强调的是,我do not推荐这种方法。请注意,使用时可能会出现一些奇怪的情况git commit -a, git commit --include, and git commit --only,包括隐含的--only如果您在命令行上命名文件,则会插入该文件。这是由于这样的事实git commit创建第二个,有时甚至第三个内部 Git 索引。任何git add您在钩子内执行的操作只会影响one这两个或三个索引文件。]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你可以在 git commit 期间更改文件内容吗? 的相关文章

  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 如何将更改提交到另一个预先存在的分支

    我刚刚对一个分支进行了更改 如何将更改提交到另一个分支 我正在尝试使用 git checkout the commmit to the changed branch b the other branch 但是 我认为这不是正确的做法 因为在
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 如何防止克隆我的 github 存储库?

    我正在尝试找到一种方法来防止从 github 存储库克隆 例如 我有一个私有存储库 有些人在该存储库中工作 在公司计算机中 团队中的每个人都设置了授权级别 当我在 github 上为某个用户设置授权时 该存储库可在他 她自己的 github
  • 从预提交挂钩中排除某些文件类型

    我想要一个预提交 git 钩子来检查 如果可能的话 自动删除 尾随空格 In 让 git 在提交之前自动删除尾随空格 https stackoverflow com questions 591923 make git automatical
  • 如何解决git中文件重命名文件夹冲突?

    我有以下问题 我有两个分支 Branch1 和 Branch2 的一些共同提交 A Branch1 是一个公共分支 位于服务器上 Branch2 是本地分支 在 Branch1 中我更改了文件 BAD folder somefile txt
  • git checkout HEAD -- 和有什么区别?和 git reset --hard HEAD?

    我已经查看了这个 stackoverflow 链接 但我认为我所要求的之间的细微差别是使用HEAD在结账命令中 因为他们的建议似乎不起作用 git reset hard HEAD 和 git checkout 之间有区别吗 https st
  • 如何更改全局 git 设置以在拉取期间进行 git 合并

    目前 我的全局设置设置为在 git pull 期间执行变基操作 我希望它默认将其更改为 git merge 如何更改此设置 TL DR git config global pull rebase false 有点细节 Git 使用配置pul
  • 将代码从没有权限的存储库推送到私有存储库?

    我有一个来自外部存储库 我们称之为 ExRepo 的文件夹 我没有任何推送权限 我有一个名为 MyOwnRepo 的个人存储库 如何获取 ExRepo 并将其合并到 MyOwnRepo 中 我已经尝试过这个 C Users
  • 以编程方式将工作项关联到拉取请求

    我可以得到 https www visualstudio com en us docs integrate api git pull requests get a pull request https www visualstudio co
  • 在防火墙后面使用 GitHub,无需 SSH 访问

    我真的很想使用 GitHub 但我的公司一切都被锁定了 现在 我只能通过HTTP协议使用Tortoise SVN 我可以以同样的方式使用 GitHub 吗 如果是这样 怎么办 我认为你一直能够克隆github https github co
  • 詹金斯钩子不工作 - 詹金斯位桶

    您好 我正在使用 jenkins 和 bitbucket 当我向 bitbucket 存储库提交任何内容时 我想触发 jenkins 中的构建 在詹金斯 我创建了一个名为test 1 在配置部分Build Triggers我勾选的部分Tri
  • 撤消多个文件和文件夹“git add”[重复]

    这个问题在这里已经有答案了 我执行了 git add 现在我想恢复 git add 我怎样才能做到这一点 git reset 这相当于git reset HEAD 将取消 add 更常见的是 取消暂存 所有文件 In Git revert用
  • 如何让“git status”始终使用短格式?

    我想要git status始终使用短格式 git status short M file1 M dir file2 file untracked3 dir file untracked4 似乎不存在这方面的配置选项 并且git config
  • 配置 Eclipse/EGit 来跟踪上游存储库

    我正在使用 EGit 如新的 Eclipse 4 2 Juno 版本中提供的 我在 GitHub 上有一个存储库 是从另一个上游存储库分叉的 当我从 Github 上的存储库在 Eclipse 中创建项目时 它正确设置origin指向 Gi
  • 本地分支显示在 GitHub 的“网络”视图上

    我们使用 Git 我们的工作流程由 dev 和 master 分支组成 它们位于 GitHub 和每个开发人员的本地存储库上 不会直接在 master 或 dev 上执行任何工作 而是在本地分支中执行工作 并且仅在 dev 上进行合并 然后

随机推荐

  • 索引 jsonb 以进行字段的数字比较

    我定义了一个简单的表 create table resources id serial primary key fields jsonb 它包含带有键 从一个大集合中提取 和 1 到 100 之间的值的数据 例如 id fields
  • 使用强力查询通过数字字符串的最小长度从文本中提取数字

    Problem我的任务是整理一些非常混乱的包含文本和数字混合的数据 并希望使用强力查询将代码与数据分开 幸运的是 需要分隔的代码仅由数值组成 并且长度似乎为 7 个字符 假设为 6 个或更长 下面是我希望如何分离数据的示例 So Far 到
  • JavaScript 中的基本对象/函数链是如何工作的?

    我试图在脑海中直接理解 jQuery 风格的函数链接的原理 我的意思是 var e f1 test f2 f3 我已经找到一个可以工作的例子 而另一个却没有 我将在下面发布这些内容 我总是想学习一些东西如何工作的首要原理 这样我就可以在此基
  • 根据谷歌表格中的日期颜色代码交替行

    我想根据谷歌表格中的备用日期对行进行阴影处理 例如 第一行始终没有阴影 如下图所示 第 2 行和第 3 行中有一个新日期 2021 03 19 因此需要对它们进行阴影处理 之后 下一个日期 2021 01 01 不需要如此 依此类推 我最近
  • 使用单选按钮触发操作

    我正在做一个项目 我需要两个单选按钮来选择日期 一个单选按钮接受系统日期并打印 但当我选择另一个按钮时 我希望用户能够输入日期 基本上我想要一个文本字段当我单击第二个单选按钮时出现 我是 html 编码新手 所以请如果有人可以帮助我 我阅读
  • Hibernate:架构验证:缺少表

    我尝试从 MSSQL Server 2016 数据库中的现有表中读取数据 如果我验证 hbm2ddl auto gt 验证 我会收到异常 架构验证 缺少表 我将生成的 Hibernate SQL 代码 如果我从验证切换到更新 与我可以在 M
  • WPF 追加文本会严重阻塞 UI 线程,但 WinForms 不会?

    我最近将我的应用程序从 WinForms 转换为 WPF 我对大多数新功能感到满意 然而 我遇到了一个主要的障碍 当我不断地将文本附加到文本框时 UI 线程变得如此阻塞 以至于我除了看着它附加文本之外什么也做不了 我需要能够在选项卡控件中切
  • 使用 AVPlayer 将实时流的音轨静音

    我正在使用 AVPlayer 播放直播流 m3U8 文件 它使用 AVPlayer 可以完美播放 但我无法将其静音 我正在使用以下代码将音频静音 NSMutableArray allAudioParams NSMutableArray ar
  • 如果仅项目内容发生更改,PagedListAdapter 不会更新列表

    我正在使用 Room 和 Paging 库来显示类别 我的实体 Entity tableName Database Table CATEGORIES data class Category PrimaryKey autoGenerate t
  • 如何指定我可以访问的数据库文件的特定位置而不是标准应用程序 /data/data/appid/database

    我需要在 android 中的特定位置创建一个 sqlite 数据库 我可以使用文件资源管理器轻松访问它 我不希望创建的 sqlite 数据库位于默认的 data data appid database 文件夹中 该文件夹受 root 保护
  • ggplot 从 csv 文件创建多线图

    我对 ggplot 以及某种程度上的 R 完全陌生 我对使用 ggplot 创建的图表的质量感到震惊 并且我正在尝试学习如何使用 ggplot 创建简单的多线图 不幸的是 我没有找到任何教程可以帮助我接近我想要做的事情 我有一个 CSV 文
  • Android 如何动态设置 Google Map Api Key 而不是从 AndroidManifest

    我需要动态设置谷歌地图 Api 密钥 即形成代码而不是来自清单 目前我正在从 string xml 获取此值 根据要求 这不是首选方式
  • 如何向 HTML 图像添加音频?

    我对这一切还很陌生 但我正在尝试将音频 mp3 声音添加到 HTML 图像中 单击时会播放该图像 我怎样才能正确地做到这一点 我已经尝试过一些东西 比如 标签 或者安装基于 java 的东西 比如 soundmanager2 但是它们似乎都
  • 在 HTML 中制作面向列的表格

    我正在尝试找出一种方法 将表格放入网页中 其中的列包含行 图 2 而不是相反 图 1 制作一个行包含列的表很简单 因为TR标签 但是没有对应的TC标签以允许表以相反的方式工作 我确实找到了这个单一的提案向 W3C 报告 但没有得到回应 似乎
  • php 7x86 上的curl pthreads 问题(资源不足)

    这是简单的演示片段
  • ADO.NET 还是 Linq to SQL?

    我正在建立一个论坛 它有 4 个表 用户 线程 评论 主题 我建立了连接和页面 我开始使用 ADO net 方式插入数据和选择数据 但后来我发现要进行更复杂的操作 我需要了解 SQL 所以我正在寻找另一种方法 我发现我可以打开Visual
  • 将两个值反序列化为同一个属性

    我有一个客户端可以调用两个不同版本的服务 一项服务仅发送一个值 value 第二个服务总是返回多个值 values 理想情况下 我想用客户端类中的单个对象来表示它 这样用户就永远看不到它是单个值还是多个值 public class MyVa
  • 将人类可读的时间差(不是时间戳)转换为可用于排序的时间[重复]

    这个问题在这里已经有答案了 我有一系列的时差 例如 7 months 11 months 1 hour 24 minutes 10 months 3 weeks 1 year 1 year 1 month 8 months 2 weeks
  • 使用 Sparql 在 Wikidata 中模糊实体查询超时

    我正在尝试使用 Sparql 通过在线端点 在维基数据中进行模糊 即部分或不区分大小写 实体标签查找 不幸的是这些返回一个 QueryTimeoutException 查询截止时间已过期 我假设这是因为查询返回了太多结果 无法在维基数据的
  • 你可以在 git commit 期间更改文件内容吗?

    我保留在我的东西之一在 GitHub 上打开小说 is a 单词列表我想自动设置第一行 即字典中的单词数 我的第一个选择是编写一个预提交挂钩 用于读取文件 计算单词数 重写第一行并再次写回 这是代码 PRE COMMIT my git my