如何在git中忽略已存在且已提交的文件?

6

可能有重复:
GIT:忽略版本控制的文件

在Stackoverflow上有很多关于.gitignore的答案,但我还没有找到一个答案:

我有一个现有的git项目,在顶层有一个readme.mdsample_folder / 。我确实想从我的git(hub)存储库中总体上将它们删除。但是,我希望在某个克隆的本地存储库上忽略它们,即在部署机器上。

我了解.gitignore只能忽略未提交的文件?坦率地说,我没有找到任何有关隐藏(从pull + commit中)已经提交的内容的信息......

在Perforce时代,我会简单地将其从相应的“客户端规范”中排除(这与本地克隆的存储库非常接近):

//whatever/myProject
-//whatever/myProject/readme.md
-//whatever/myProject/sample_folder

当然,我可以选择创建一个第二分支,只删除readme和整个样本文件夹。但是,这样一来,我就必须不断地从“develop”分支合并每一个微小的修复,而我宁愿避免这种情况......我宁愿选择一个本地“例外”而不是一个(被跟踪的)分支。

此外,我认为每次提交时都应该使用git rm --cached(这也可能会偶尔发生在我的“部署仓库”中)...


很难理解你的问题... 为什么你想要忽略拉取而拥有文件呢?我可以想象麻烦的根源,因为不是所有的仓库都会在相同的提交状态下。 - CharlesB
对于任何感兴趣或开发人员来说,拥有一个示例文件夹(或文档文件夹或自述文件)是很有帮助的,在部署场景中,这些都是多余的,甚至可能会引起问题... - Frank N
@Wooble:这听起来非常有前途!非常感谢。我会进行调查。 - Frank N
3个回答

5
也许我理解错了问题,但是以下内容不是可以解决你的问题吗?
git rm --cached readme.md sample_folder/*
echo "readme.md" >>.gitignore
echo "sample_folder/*" >>.gitignore
git commit -am "Untracked some files"

2
听起来你可能正在使用git checkout作为你的部署方法。有时这很有效,但有时需要更多的操作。如果代码库中有开发工件,那么你需要进行更多的操作。
处理这个问题最明显的方法是编写一个部署脚本,执行拉取操作,然后删除多余的目录和文件。但这样做会留下一个部分代码库,可能会让人感到困惑,并且还需要记住使用和更新特殊脚本。
另一种处理方法是创建一个部署分支。创建一个分支,删除冲突的文件和目录,然后从该分支进行拉取。是的,你需要将开发分支中的更改合并到部署分支中。你可能认为这是件麻烦事,但它是一个保障。如果你在开发中快速进行更改,并且同样快速地进行部署,那么你可能会在部署周期中遇到问题。
你需要在开发和部署之间增加一步,以便考虑和测试你的更改。至少,这可以防止开发者A推送错误的更改,管理员B无意中将其拉入生产环境。你还希望能够推送到开发环境并与其他开发者共享你的工作,而不必冒着被推送到生产环境的风险。
你现在可能是负责开发和部署的唯一人员,但以后可能不会是这样。至少,这可以保护你免受意外推送不稳定更改到开发环境,并在你有机会思考之前将其拉入部署环境的风险。

对于正式发布,我肯定会有一个“稳定”分支。但是对于我的快速和简单的“部署”,我非常不愿意花费太多精力 :) 我想要推送微小的修复(而不看到许多虚假的更改,即使我不会将它们添加到阶段中)。我将调查上面Wooble的评论... - Frank N

0

这不是关于.gitignore的问题。如果这些不是代码,你应该通过子模块在一个单独的仓库中跟踪它,并且在服务器上不运行任何git submodule命令。或者在部署机器上检出后只需编写脚本删除这些文件。


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