直到今天,我还是以下列方式使用git:
我的网络服务器上的主要仓库/路径/ www作为文档根
我个人电脑上的克隆
我通常在PC上进行大的更改并推送到服务器。在这之后,我不得不“git reset HEAD”和“git checkout”。在服务器上。有时我会在服务器上进行一些小改动,然后将其拉回到PC上。这一切都很好,直到今天,在推动时,git抱怨
remote: error: refusing to update checked out branch: refs/heads/master
etc.
为什么在6-12个月工作正常后,现在应该失败?
由于StackOverflow问题找到http://toroid.org/ams/git-website-howto后,我将/ path / www复制到/path/www.git并将其设为'裸'回购。文档根目录仍在/ path / www。我添加了一个包含“GIT_WORK_TREE = / path / www checkout -f”的.git / hooks / post-receive脚本。
在PC上修改配置以指向www.git repo后,我现在可以像以前一样推送,并在文档根目录中上传和更新更改。我对此有几个问题:
howto暗示工作树没有.git元数据。这真的是这样吗?我尝试删除其.git目录,但“git status”不再有效。将GIT_DIR设置为/path/www.git没有帮助,因为git说回购(在/path/www.git的裸机)实际上并不是回购。
如果我更新index.html并在PC上添加somefile.html并推送这些更改,则会在服务器的doc根目录中更新/添加这些文件。但是如果我在doc根目录中使用“git status”,它会告诉我index.html已被更改,somefile.html是一个未经跟踪的文件。我天真地期望“checkout -f”会将工作树更新为我从PC推送的内容。我可以实现吗?
答案 0 :(得分:0)
howto暗示工作树没有.git元数据。这是 真的如此吗?
是。你有一个简单的仓库设置,并实际上为你的网站获取你的文件,你“临时”分配一个工作目录到裸仓库并检查到你想要的网站路径。这就是GIT_WORK_TREE=/path/www checkout -f
的作用。在您转移到裸仓库之前,存在的.git
将是您之前设置的工件。
但是如果我在doc root中使用“git status”,它会告诉我 index.html已更改,somefile.html是未跟踪的文件。
同样,这似乎是您之前设置中.git
存在的效果。删除/var/www/.git
我天真地期望“checkout -f”会更新 工作树正是我从PC推出的。
你的期望是正确的,这应该如何运作。如上所述删除.git
。
要实际执行git状态,请转到/var/www.git
并执行GIT_WORK_TREE=/var/www git status
PS:你为什么要在服务器上进行如此多的更改和git状态?限制自己使用PC。