从本地克隆推送到远程存储库会自动删除提交

时间:2016-12-15 00:56:41

标签: git

我在GoDaddy上有一台服务器,我已经为它创建了一个远程存储库。在我的本地机器上,我克隆了这个存储库,我试图提交一个新文件并将其推送到远程仓库。在我的远程仓库上输入git status之后我得到了这个:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    tester.c
#

如何在不删除文件的情况下提交文件?为什么要删除我提交的文件?

1 个答案:

答案 0 :(得分:0)

您注意到您拥有对远程存储库的ssh访问权限。

一旦您进入远程存储库,它就是您的本地存储库。所以你拥有的是两个本地存储库,每个存储库都以外国人的身份查看另一个存储库。您允许外国人连接到本地计算机(GoDaddy上的服务器)并更改上的内容。

当你这样做时,你必须非常小心。默认情况下,Git会使用receive.denyCurrentBranch的默认设置为您提供此护理。当您从外部计算机(家中的系统)运行git push时,本地计算机(服务器)将拒绝推送,因为您在本地计算机上使用该计划。

您通过更改receive.denyCurrentBranch的设置禁用了安全机制。然后你把你的外国机器撞到你的本地(服务器)机器上,好像你正在驾驶一辆车进行另一辆车进行碰撞测试,现在你似乎有一个丢失的文件。它实际上并没有丢失,只是在所有安全设备都被禁用的情况下,Git希望你拿起所有的螺母,螺栓,轮胎,活塞等等,并将它们重新组装成合适的汽车。每次碰撞后的形状。这是一个痛苦的屁股,所以不要这样做。

通常,接收推送的服务器应该具有&#34;裸&#34;存储库

裸存储库是没有工作树的存储库。由于它没有工作树,因此永远不会发生碰撞。

在Git 2.4及更高版本中,您可以将receive.denyCurrentBranch设置为updateInstead。这将拒绝推送,除非服务器上的工作树没有正在进行的工作。在该特定情况下,接收Git(在服务器上)将本地工作树更新为新推送的提交。这仍然不是完全安全的 - 您可能正在编辑文件并且无法将其写回到工作树,但是对于自动部署来说很方便。你仍然不能在服务器上进行开发,因为这样做可能会在你不注意的时候更新&#34;方面,无论如何最好使用裸存储库。但现在有可能。

相关问题