开发人员在服务器上添加了一个图像目录,但没有将该文件夹添加到 .gitignore 文件中。当我执行 git pull 时,它会拉出那些文件(数百个文件)。我将文件夹添加到服务器上的 .gitignore 但不是我的本地系统。然后我在本地(永久)删除了这些文件。当我执行 git status 时,所有已删除的文件仍会显示。我怎样才能阻止他们出现?
更新: 感谢所有的大力帮助。为了确保没有误解:我确实想将文件保留在服务器上;我只想从 git 中删除它们。
开发人员在服务器上添加了一个图像目录,但没有将该文件夹添加到 .gitignore 文件中。当我执行 git pull 时,它会拉出那些文件(数百个文件)。我将文件夹添加到服务器上的 .gitignore 但不是我的本地系统。然后我在本地(永久)删除了这些文件。当我执行 git status 时,所有已删除的文件仍会显示。我怎样才能阻止他们出现?
更新: 感谢所有的大力帮助。为了确保没有误解:我确实想将文件保留在服务器上;我只想从 git 中删除它们。
我发现这是完成任务的最简单方法。
$> git add -u <directory-path> (or you may use --update)
原始状态:
$> git status .
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: .ipynb_checkpoints/Untitled-checkpoint.ipynb
deleted: CVPR 1 hr tute-Backup.ipynb
deleted: cifar10-test.t7
deleted: cifar10-train.t7
deleted: cifar10torchsmall.zip
deleted: create_advr.lua
deleted: criterion_cifar10_lr_0.001_epoch_13.t7
deleted: train_cifar10.lua
deleted: trained_net_cifar10_lr_0.001_epoch_13.t7
因此,要从当前目录中删除所有已删除的文件,我使用。
$> git add -u .
$> git commit -m "removing deleted files from tracking"
$> git push origin master
最终状态:
$> git status .
On branch master
nothing to commit, working directory clean
希望这可以帮助 :)
您可能需要git rm
删除的文件。来自Pro Git:
删除文件
要从 Git 中删除文件,您必须将其从跟踪的文件中删除(更准确地说,将其从暂存区域中删除)然后提交。该
git rm
命令会执行此操作,并且还会从您的工作目录中删除该文件,这样您下次就不会将其视为未跟踪的文件。如果您只是从工作目录中删除文件,它会显示在输出的“已更改但未更新”(即unstaged)区域下
git status
:$ rm grit.gemspec $ git status # On branch master # # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # # deleted: grit.gemspec #
然后,如果您运行
git rm
,它将暂存文件的删除:$ git rm grit.gemspec rm 'grit.gemspec' $ git status # On branch master # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: grit.gemspec #
下次提交时,该文件将消失且不再被跟踪。如果您已修改文件并将其添加到索引中,则必须使用该
-f
选项强制删除。这是一项安全功能,可防止意外删除尚未记录在快照中且无法从 Git 恢复的数据。
在您发表评论后更新。
如果要将图像保留在服务器上,但要从 git 中删除文件,则需要将--cached
标志添加到git rm
.
cd images
git rm --cached *
cd ..
echo "images" > .gitignore
git add .
git commit -m "removed image files from git only"
git push
如果您希望人们在拉取时创建图像目录(但没有文件),则添加images/.gitignore
单行!.gitignore
请注意,这不会将它们从历史记录中删除。为此,我会看看这个 SO answer
由于他们已经提交到存储库,因此需要做更多的工作,但仍然可行。
我在这个过程中找到的最好的演练是 Github 的关于删除敏感数据的指南。由于您要保留文件,因此您需要在指南之前和之后执行一个步骤。
在开始此过程之前,请将文件从工作目录中复制出来。完成清除它们的 repo 后,将它们复制回来并将它们添加到您的 .gitignore 中。
将该文件夹也添加到本地的 .gitignore 中。
git rm <deleted file path>
然后git commit
将清理工作目录。