Git创建文件,但奇怪的是再次删除它们

时间:2011-02-04 17:51:50

标签: git

我现在正从我的Windows机器上使用Git。

我克隆了回购,做了一些改变并推动。

直到这里一切正常。

但是当我在我的本地文件夹中提交test.txt并推送时,

然后查看我的远程仓库并执行

git log: 显示提交消息

git status: 文件已删除“test.txt”

那是什么?

为什么'文件已删除“test.txt”'?

应该创建文件!

然后我可以提交文件删除的更改,当我再次拉到我的本地文件夹时,文件也会在本地文件夹中再次被删除。

任何帮助?

你的,乔恩。

2 个答案:

答案 0 :(得分:3)

你提到你使用gitosis,但是从你提供的命令输出我唯一的结论就是你的gitosis设置完全被打破了。

我注意到的第一件事是你被要求输入密码,看来你输入了密码并继续推送。服务器永远不应该要求输入密码,如果确实存在,则表示您没有向服务器提供正确的ssh密钥对,或者服务器配置错误,并且由于帐户gitosis正在使用,应该导致中止推送尝试有密码设置。通过使用密码,这意味着您将覆盖gitosis旨在执行的所有操作,您也可以将其删除,因为它根本不被使用。

我注意到的第二件事是你推动/var/www/saris/.git,它通过标准命名约定表示非裸回购。再一次,你似乎要解决gitosis所做的一切,因为gitosis只适用于裸露的回购。此外,这正是您在服务器上看不到任何更改的原因。当推送到非裸仓库时,工作树永远不会更新,因此您似乎想要获得的效果(更新/ var / www / saris中的网站)将无效。有关非裸回购和使用git管理网站的详情,请参阅https://git.wiki.kernel.org/index.php/GitFaq#non-barehttp://toroid.org/ams/git-website-howto

此外,我想在可能的情况下指出gitosis是由git社区维护和弃用的,而不是上级gitolite

编辑:您已完全删除了原始问题,并将其替换为另一个不相关的问题,并丢失了所有原始详细信息。您应该刚刚创建了一个新问题,但无论如何我都会回答您的新问题。

您的新问题基本上是最基本和最常见的问题之一。我经常被问到它有GitFaq的一部分我已经复制到这里,甚至在我回答你原来的问题时就联系起来了。

  

为什么我不会在“git push”之后看到远程仓库中的变化?

     

推送操作始终是传播存储库历史记录和更新引用,并且永远不会触及工作树文件。特别是,如果您推送更新在远程存储库中检出的分支,则工作树中的文件将不会更新。

     

这是一项预防性设计决定。远程存储库的工作树可能具有本地更改,并且您无法进入远程存储库,以解决您正在推送的更改与工作树中的更改之间的冲突。但是,您可以轻松地进行更新后挂钩以更新已签出分支的工作副本。不将其作为默认示例钩子的原因是它们仅在出现问题时才通知执行推送的人员。最新的更新后草案挂钩是在http://utsl.gen.nz/git/post-update,它处理几乎所有情况,除了远程端已经存在冲突的合并(因为git-stash目前无法存储)。它也无法在可能的情况下工作,例如没有文件实际上是冲突的。

     

一个快速的经验法则是永远不要进入附有工作树的存储库,直到你知道自己在做什么为止。

     

如果你确定自己在做什么,可以在你推到的那一边做一个“git reset --hard”。请注意,这将丢失您在该侧所做的所有更改,将工作树重置为您推送的最新修订版。有关详细信息,请参阅有关裸存储库的文章。

请再次阅读我在回答您的第一个问题时链接的http://toroid.org/ams/git-website-howto。如果您使用该解决方案,则不会出现此问题。

答案 1 :(得分:0)

当推送时,如果您的提交不是远程仓库的快进(例如,其他人已将更改推送到远程仓库),则会收到拒绝错误。解决此问题的最简单方法是执行git pull来获取更改,然后执行自动合并。

如果您使用多个分支,Git默认情况下会尝试推送所有 - 而不仅仅是您当前的分支。这可能会导致一些令人困惑的消息,这些消息将显示多个成功或被拒绝的行。 This question有一些配置可以添加以更改此行为。