有一个文件被跟踪git,但现在该文件在.gitignore列表中.
但是,该文件在git status编辑后会一直显示.你怎么强迫git完全忘掉它?
我的初始提交包含一些日志文件.我已添加*log到我的.gitignore,现在我想从我的存储库中删除日志文件.
git rm mylogfile.log
Run Code Online (Sandbox Code Playgroud)
将从存储库中删除文件,但也将从本地文件系统中删除它.
如何在不删除文件的本地副本的情况下从存储库中删除此文件?
我克隆了一个包含一些.csproj文件的项目.我不需要/喜欢我的本地csproj文件被Git跟踪(或者在创建补丁时被提起),但显然它们在项目中是必需的.
我已添加*.csproj到我的LOCAL .gitignore,但文件已经在repo中.
当我输入git status时,它会显示我csproj对跟踪或提交补丁不感兴趣的更改.
如何从我的个人仓库中删除这些文件的"跟踪"(但是将它们保存在源代码中以便我可以使用它们)以便在我执行状态(或创建补丁)时看不到更改?
是否有正确/规范的方法来处理这种情况?
我提交并将一些目录推送到github.之后,我更改了.gitignore文件,添加了一个应该被忽略的目录.一切正常,但(现在被忽略)目录保留在github上.
如何从github和存储库历史记录中删除该目录?
我们的项目已经使用git一个星期左右了,而且我们都非常享受它(在紧密的协作组中,它变成了一个完全不同的git体验).为了使事情尽可能简单,我们不会进行任何变基或历史修改.但我们确实在第一周犯了一些错误.做了一些不应该做的提交,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0).在他们长期进入我们的历史之前,我们没有发现这些事情.
现在我看到很多关于重写历史的警告,但我不确定我是否理解所涉及的危险.我们使用共享的裸存储库,并将所有分支推送到那里进行备份.
我希望如果你重写历史记录(比如删除一个提交),后续提交的完整列表将"丢失"该提交(并且可能不会编译/工作).我也希望如果发生这种情况,我实际上可以选择在历史的顶部解决这个问题(并将这部分历史留作非编译).
任何关于这个主题的文章/教程的参考也会非常好.
我和其他几个人都可以访问包含 IDE 自动生成的一个文件的存储库。该文件是特定于 PC 的,因此不应位于源代码管理中,但目前是。我想删除它并将其添加到.gitignore,但我不希望其他协作者在拉取我的更改时将其删除。关于删除文件但保留本地副本存在很多问题;但他们不覆盖其他用户,所以当他们拉动时,尽管我保留了我的副本,他们仍然会丢失副本:
还有一些问题和解决方案,可以在拉取时不丢失本地文件,这样他们就可以保留文件,但这需要拉取时的明确操作,我不想去告诉每个人到底如何拉取这个文件时间。我确实发现了两个重复的问题。得到的答案是不可能,但那都是 5 年前的事了——这期间有什么变化吗?
这很重要,因为该文件是在您首次导入整个项目时自动生成的,并且包含有关本地编译器/库版本的信息。所以删除它需要重新导入。如果有什么区别的话,那就是.idea/scala_compiler.xmland .idea/scala_settings.xml(实际上整个.idea目录应该被忽略)。基本上我想让 Git 将一个文件设置为不再跟踪,但不为任何人删除它。
为了明确这个问题,我不是在问如何从历史记录中删除单个文件,就像这个问题:Completely remove file from all Git repository commit history。我也不是在询问从 gitignore取消跟踪文件,就像在这个问题中一样:Ignore files that have been commited to a Git repository。
我说的是“更新 .gitignore 文件,然后从历史记录中删除与列表匹配的所有内容”,或多或少类似于这个问题:忽略已提交到 Git 存储库的文件。但是,不幸的是,该问题的答案不适用于此目的,因此我在这里尝试详细说明该问题,并希望找到一个不涉及人工查看整个源树以手动执行过滤器分支的好答案在每个匹配的文件上。
在这里,我提供了一个测试脚本,目前正在执行Ignore files that have been commited to a Git repository的答案中的过程。它将root在 PWD 下删除并创建一个文件夹,因此在运行它之前要小心。我将在代码之后描述我的目标。
#!/bin/bash -e
TESTROOT=${PWD}
GREEN="\e[32m"
RESET="\e[39m"
rm -rf root
mkdir -v root
pushd root
mkdir -v repo
pushd repo
git init
touch a b c x
mkdir -v main
touch main/{a,x,y,z} …Run Code Online (Sandbox Code Playgroud) 我有一个使用 GIT 进行版本控制的网站。我有一个系统设置,基本上可以自动将我的master分支中的更改部署到我的生产服务器。也就是说,我的存储库中有一个 Web 钩子,它触发一个 PHP 脚本,该脚本基本上git pull在服务器上启动 a以便下拉更改。
我的问题在于我目前有一个config.php使用 git 跟踪的配置文件 ( )。我自己和另一个开发人员想要拥有config.php与服务器上的文件不同的我们自己的文件,因此我们想告诉 git 停止跟踪该文件并假装它不存在。
我们决定首先使用一个不太重要的文件进行测试,所以我们添加test.php到我们的.gitignore文件中,希望这能奏效。Git 仍在跟踪该文件,因此我尝试运行git rm --cached test.php以尝试停止跟踪该文件。这似乎奏效了,所以我们承诺并推动了我们的改变。
令我惊讶的是,当我们的部署脚本在我们的服务器上发起拉取时,我们发现该文件已从生产中删除。谢天谢地,删除test.php并不重要。
TLDR;我如何告诉 git 忽略它当前跟踪的文件,取消跟踪并从我的存储库中删除它,但在我的生产服务器上保持完整?
git ×8
gitignore ×4
git-rm ×2
delete-file ×1
deployment ×1
git-rebase ×1
github ×1
ignore ×1
rebase ×1
repository ×1