首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使.gitattributes更改生效

如何使.gitattributes更改生效
EN

Stack Overflow用户
提问于 2018-02-06 12:04:53
回答 3查看 13.9K关注 0票数 30

我正在做一个我们最近开始使用git的项目。这个设置从一开始就不完美,所以我已经在人们开始克隆/工作之后设置了.gitattributes,并且我仍然在对这个文件进行一些更改。

考虑下面的设置..。

Alice和Bob都克隆了"repo.git“,存储库中包含文件/myproj/src/file.end以\n作为行尾,即文件不包含\r字符。

它们都具有具有以下设置的.gitattributes

代码语言:javascript
复制
/myproj/src/file.ending -text

这告诉git,file.ending不应该被视为文本文件,因此不应该进行行结束转换。

因此,Alice's和Bob的工作树中的文件也以\n作为行的结尾。

现在,Alice对.gitattributes做了以下更改:

代码语言:javascript
复制
/myproj/src/file.ending text

爱丽丝希望这一改变对她和鲍勃都生效。

我现在所知道的唯一的方法是很有侵扰性的:

代码语言:javascript
复制
git rm --cached -r .
git reset --hard

我想避免两件事:

  • Alice has to commit her `.gitattributes` file before she can actually test it (reset above will overwrite her changes).
  • Bob has to wipe his index and working tree to get the update. Bob is not happy.

这样做的首选方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2018-08-31 07:00:01

你不必硬地重置(如果我正确理解你在做什么)。

我的案子很相似。我在一个正在运行的项目中添加了一个.gitattributes。我需要我的文件和在线回购中的文件被吉塔特统治。

代码语言:javascript
复制
# This will force git to recheck and "reapply" gitattributes changes.
git rm --cached -r .
git add -A

您的提交将重新添加所有您提到的.ending文件,您将不会丢失任何可能发生的更改。当然,鲍勃得拉起来才能拿到它。

票数 21
EN

Stack Overflow用户

发布于 2019-06-05 09:07:26

osse on irc://chat.freenode.net/#git给了我这个方法,它运行得相当好:

代码语言:javascript
复制
git rm -r :/ && git checkout HEAD -- :/

如果您的树中有未提交的更改,这将引起抱怨。

不过,似乎应该有更好的办法。

票数 7
EN

Stack Overflow用户

发布于 2018-02-06 14:14:49

“希望这一改变生效”,你的意思是,爱丽丝希望工作副本切换到Windows风格的行结束为她和鲍勃?第一个问题是,为什么Alice要对Bob的工作树中的内容负责?

如果新属性更好地描述了该文件,那么也可以这样做;.gitattributes文件可以像任何其他属性一样进行编辑、测试和提交。

您建议的使新属性生效的过程没有多大意义,原因有二:

首先,你为什么要抹去指数?文本属性影响索引和工作副本之间的关系。在您的示例中,它似乎是您需要更改的工作副本,而不是索引。

第二,你为什么要抹去指数上的所有东西?只有属性发生变化的路径才需要处理。

因此,在您的示例中,如果Alice想在本地反映新属性,那么最有必要的是

代码语言:javascript
复制
rm myproj/src/file.ending
git checkout -- myproj/src/file.ending

由于此过程不覆盖.gitattributes文件,因此不需要过早提交它。

我不清楚是什么让鲍勃对你原来的手术感到不高兴,所以我不知道这件事是否让他更快乐。也许他只是想要升级是自动的,当他拉;虽然这不是不合理的期待,但我不确定它是否在卡中的git工作。

问题是如何检测更改。几乎在每种情况下,如果git在合并或快速转发结束时更新工作树(例如完成拉),它只需比较索引对象的散列(用于旧提交和新提交),就可以判断是否有需要应用的更改。

例外情况是,如果属性(或过滤器定义)发生变化--正如上面所指出的,这不会改变索引。但这种情况相对较少,而且每次检查都要比散列支票贵得多,所以,与其用几乎毫无意义的成本进行每一次比较,它还允许当你知道你做了某些事情时,你必须采取额外的步骤。

因此,如果这种情况要发生一次,就让团队进行沟通。“此路径的属性正在更改;您可能希望刷新受影响文件的工作副本。”

如果它要反复发生,我最好的建议是弄清楚为什么会这样,并解决它。您可以尝试设置某种脚本化的自动化,甚至可以使用钩子来检测和处理属性更改;但是这会带来很多复杂的问题,可能会带来比修复的麻烦更多的麻烦。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48642692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档