如何告诉Git忽略LibreOffice锁定文件?

22
我有一个包含一些XSLX文件的git仓库。我偶尔使用LibreOffice编辑它们。有时候LibreOffice不会删除锁定文件(./folder/.~lock.filename.xslx#),这会导致这些文件在每次git status中被列为新文件。
我希望git忽略它们。我在.gitignore中尝试了以下内容,但似乎没有起作用:
*.~lock*
.~lock*
*/.~lock*

有任何想法吗?

更新

还尝试过:

.~lock.*#

http://lists.freedesktop.org/archives/libreoffice-commits/2012-December/040253.html中尝试了,但没有成功。


4
.~lock* 对我有用。你已经提交那些文件了吗?.gitignore 只对未被追踪的文件起作用。 - Nevik Rehnel
1
.~lock* 对我也管用。你使用的 Git 版本是哪个? - FelipeC
在 Git for Windows 中对我不起作用。 - Gabriel Staples
即使我添加了完全相同的 .~lock 文件并排除它,使用其完整名称,它仍然无法工作……不知道为什么。 - Gabriel Staples
解决了...https://dev59.com/22Ik5IYBdhLWcg3wguX-#48970642 ...浪费了1个小时:(。第一次在Windows上真正使用git :( ... - Gabriel Staples
3个回答

23

为了测试 .gitignore 的模式,

<a rel="noreferrer" href="https://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html">git ls-files</a> -ix '.~lock*'

为了查看是否有任何被缓存、暂存、跟踪或添加的文件符合忽略模式(因此可能是错误添加的),

git ls-files -ic --exclude-standard

正如 @NevikRehnel 指出的那样,git 不会忽略已被追踪的文件。要取消追踪文件,

<a rel="noreferrer" href="https://www.kernel.org/pub/software/scm/git/docs/git-rm.html#_options">git rm --cached</a> path/to/it

可以通过从下一次提交中将其删除,但是从早期历史记录中取出文件的唯一方法是重写,例如使用git commit --amend(如果仅是最后一次提交),git rebase -i(如果只有几个需要操作),或git filter-branch(用于批量工作)。这些命令实际上并不更改旧的历史记录,它们只会添加新的历史记录并切换当前分支以引用它。旧的历史记录仍然存在,并且没有移动任何其他引用。


4
答案(正如您在评论中发现的):在.gitignore文件中添加*.~lock*就可以了。
此外,如果使用Git for Windows,请确保将您的.gitignore文件命名为.gitignore,而不是.gitignore.txt,因为如果使用Windows Explorer重命名或创建文件,则Windows会试图强制将其命名为.gitignore.txt。要做到这一点,请使用文本编辑器保存它,而不是尝试在Windows资源管理器中重命名它(在此处查看更多信息)。
如果您意外地在结尾处加上了.txt扩展名,则无法正常工作,git也无法正确读取该文件作为.gitignore文件。
有关更详细的gitignore格式说明以及了解如何指定要忽略的文件和文件夹的语法,请参阅我的评论和示例:我的.gitignore文件eRCaGuy_dotfiles存储库。

非常感谢!我整个周末都被这个问题困扰着。*.~lock*解决了我的问题。 - win4win

-1
如果您尝试了上述解决方案但仍然无法解决问题,请查看此链接,它帮助我解决了问题: excluding LibreOffice lock files 实际上,我最终创建了一个 .gitignore 文件,尽管最初我本来想将它们添加到 git 的“排除”文件中。不过我认为这个解决方案也适用于那种情况。
基本上的想法是关闭并重新启动 LibreOffice,然后“cd”出您的 git 存储库,再次进入以使更改生效。
我希望这能帮助其他遇到此问题的人。

请避免在没有总结相关信息的情况下链接到其他网站。 - Amanda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接