我正在做一个我们最近开始使用git的项目。这个设置从一开始就不完美,所以我已经在人们开始克隆/工作之后设置了.gitattributes,并且我仍然在对这个文件进行一些更改。
考虑下面的设置..。
Alice和Bob都克隆了"repo.git“,存储库中包含文件/myproj/src/file.end以\n作为行尾,即文件不包含\r字符。
它们都具有具有以下设置的.gitattributes:
/myproj/src/file.ending -text这告诉git,file.ending不应该被视为文本文件,因此不应该进行行结束转换。
因此,Alice's和Bob的工作树中的文件也以\n作为行的结尾。
现在,Alice对.gitattributes做了以下更改:
/myproj/src/file.ending text爱丽丝希望这一改变对她和鲍勃都生效。
我现在所知道的唯一的方法是很有侵扰性的:
git rm --cached -r .
git reset --hard我想避免两件事:
这样做的首选方法是什么?
发布于 2018-08-31 07:00:01
你不必硬地重置(如果我正确理解你在做什么)。
我的案子很相似。我在一个正在运行的项目中添加了一个.gitattributes。我需要我的文件和在线回购中的文件被吉塔特统治。
# This will force git to recheck and "reapply" gitattributes changes.
git rm --cached -r .
git add -A您的提交将重新添加所有您提到的.ending文件,您将不会丢失任何可能发生的更改。当然,鲍勃得拉起来才能拿到它。
发布于 2019-06-05 09:07:26
osse on irc://chat.freenode.net/#git给了我这个方法,它运行得相当好:
git rm -r :/ && git checkout HEAD -- :/如果您的树中有未提交的更改,这将引起抱怨。
不过,似乎应该有更好的办法。
发布于 2018-02-06 14:14:49
“希望这一改变生效”,你的意思是,爱丽丝希望工作副本切换到Windows风格的行结束为她和鲍勃?第一个问题是,为什么Alice要对Bob的工作树中的内容负责?
如果新属性更好地描述了该文件,那么也可以这样做;.gitattributes文件可以像任何其他属性一样进行编辑、测试和提交。
您建议的使新属性生效的过程没有多大意义,原因有二:
首先,你为什么要抹去指数?文本属性影响索引和工作副本之间的关系。在您的示例中,它似乎是您需要更改的工作副本,而不是索引。
第二,你为什么要抹去指数上的所有东西?只有属性发生变化的路径才需要处理。
因此,在您的示例中,如果Alice想在本地反映新属性,那么最有必要的是
rm myproj/src/file.ending
git checkout -- myproj/src/file.ending由于此过程不覆盖.gitattributes文件,因此不需要过早提交它。
我不清楚是什么让鲍勃对你原来的手术感到不高兴,所以我不知道这件事是否让他更快乐。也许他只是想要升级是自动的,当他拉;虽然这不是不合理的期待,但我不确定它是否在卡中的git工作。
问题是如何检测更改。几乎在每种情况下,如果git在合并或快速转发结束时更新工作树(例如完成拉),它只需比较索引对象的散列(用于旧提交和新提交),就可以判断是否有需要应用的更改。
例外情况是,如果属性(或过滤器定义)发生变化--正如上面所指出的,这不会改变索引。但这种情况相对较少,而且每次检查都要比散列支票贵得多,所以,与其用几乎毫无意义的成本进行每一次比较,它还允许当你知道你做了某些事情时,你必须采取额外的步骤。
因此,如果这种情况要发生一次,就让团队进行沟通。“此路径的属性正在更改;您可能希望刷新受影响文件的工作副本。”
如果它要反复发生,我最好的建议是弄清楚为什么会这样,并解决它。您可以尝试设置某种脚本化的自动化,甚至可以使用钩子来检测和处理属性更改;但是这会带来很多复杂的问题,可能会带来比修复的麻烦更多的麻烦。
https://stackoverflow.com/questions/48642692
复制相似问题