是否有一种非破坏性的方法(不提交,不更改存储库)让 .gitignore 文件本身在 git 版本 2.34.1 或更高版本中被真正忽略?

问题描述 投票:0回答:2

是否有一种非破坏性的方法(不提交,不更改存储库)让 .gitignore 文件本身在 git 版本 2.34.1 或更高版本中被真正忽略?

我一直在尝试来自如何阻止.gitignore出现在未跟踪文件列表中?和其他人的许多答案,至少是那些想要更改存储库以使其工作的破坏性答案。

另外,我不想在全局 git 忽略文件中使用任何技巧,因为它是全局的,我需要为单个项目进行特定配置。

我很小心,我不需要应用程序来执行:强迫我不要以任何充分的理由忽略 .gitignore。

问题是,我必须在项目文件夹外部创建 .gitignore 的备份副本,并在合并之前将其恢复,然后再恢复,这样做非常烦人。

我正在分叉的存储库中编码。我不想在我的存储库中更改该文件,因为准备拉取请求会带来额外的麻烦......

我尝试用 ex

sed -i -r 's@gitignore@git1gn0r3@' git
修补 git 可执行文件和 git-gui shell 脚本,但没有帮助。进行非系统安装并修补整个 git 应用程序以使这个简单的事情发挥作用的唯一选择是吗?

建议:如果我们有一个像这样的 git 参数:

git --I-Surely-Know-What-I-Am-Doing
,它可以在启动时创建一条大消息,说如果发生问题我不应该抱怨,我会接受它......

所以我尝试放入 .gitignore

.gitignore
,但没有任何改变。我也尝试将它放在
.git/info/exclude
,但什么也没发生。

有什么建议吗?

git configuration local gitignore
2个回答
1
投票

.gitignore
肯定可以被忽略,但是在Git中不可能忽略对跟踪文件的更改,所以
.gitignore
不能同时被忽略和跟踪。有些人推荐
git update-index
的各种功能来尝试做到这一点,但是 Git FAQ 非常清楚,不能正常工作,不应该使用。

如果您有未签入的

.gitignore
文件,则可以通过在
.gitignore
中添加
.git/info/exclude
来忽略它。但是,您最好只使用
.git/info/exclude
来自定义图案。它是专门为允许您自定义值并覆盖存储库中的内容而设计的。此文件中的模式优先于
.gitignore
,因此您可以添加排除项(以
!
开头)或常规忽略模式以根据需要自定义它们。


0
投票

我正在分叉的存储库中编码。我不想在我的存储库中更改该文件,因为准备拉取请求会带来额外的麻烦...

相反,您确实想要更改存储库中的该文件!将您的本地更改签入为临时提交,这基本上是普通的普通提交,但具有使它们脱颖而出的命名策略,并且您可以在发出拉取请求之前将其删除。


假设您已经开发了一些 foo 功能并准备好创建拉取请求。到目前为止,您已经在一个基于

foo_feature.work
分支的分支
main
上工作,该分支还包含一些不应成为拉取请求一部分的临时提交。

首先启动交互式变基来清理东西。

git checkout -b foo_feature foo_feature.work   # New branch for cleaned commits
git rebase --interactive --rebase-merges main

你修剪的地方

label onto

reset onto
pick 26b113a Started implementing foo
pick 5789e28 ==== debug foo ====
pick aba387b Finished implementing foo
pick 59e614a Improved bar
pick bb839a9 ==== debug bar ====
pick f565932 ==== ignore some log files ====
pick dbcfd2b Removed unused baz
pick 3e632d9 ==== ignore some more files ====

以下内容:

pick 26b113a Started implementing foo
pick aba387b Finished implementing foo
pick 59e614a Improved bar
pick dbcfd2b Removed unused baz
git push origin foo_feature

并创建拉取请求。


如果这是一次性开发,您可以删除

foo_feature.work
分支。但是,由于您表明要在合并之间恢复和恢复内容,因此明确表明您希望保留这些临时提交以供以后使用。因此,然后将工作分支重新定位到已清理的分支之上:

git rebase foo_feature foo_feature.work   # In case of conflicts, use KDiff3
# https://github.com/hlovdal/git-resolve-conflict-using-kdiff3

现在您拥有以下内容:

合并拉取请求后,您可以在开始处理下一件事时拾取临时提交:

git branch -m foo_feature.work next_thing.work
git rebase --onto main foo_feature next_thing.work
git banch -d foo_feature  # Already merged though the completed pull request.

尝试忽略由源代码控制处理的整个文件从根本上来说是有缺陷的,因为不能保证它要么只有您想要向上游贡献的更改,要么只有您不想向上游贡献的更改。

如果作为使用 foo 功能的一部分,您需要向

.gitignore
添加一些内容,应该 包含在拉取请求中,但是该怎么办? 该文件还有一些您不想包含的内容?任何忽略整个文件的尝试在这里都不会起作用。

始终有效的唯一明智的解决方案是将这些更改作为单独的提交签入,然后通过清理交互式变基忽略您不希望包含在拉取请求中的提交。

© www.soinside.com 2019 - 2024. All rights reserved.