2009-10-10 167 views
-1

我有一个名为TestRepo的本地存储库。我使用--bare选项克隆它,将此克隆压缩,然后将其放到我的服务器上。解压缩它,它仍然是裸露的。推到裸Git存储库(远程)导致它停止裸露

我那么喜欢的东西

git clone ssh://[email protected]/~/TestRepo.git TestRepoCloned 

当地TestRepoCloned本地克隆裸远程仓库通过SSH是裸露,具有远程名为“起源”。它似乎跟踪其配置文件的外观

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = ssh://[email protected]/~/TestRepo.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

我编辑一个现有的文件。我通过

git commit -a -m "Edited a file." 

改变当前分支(主)。提交成功,一切正常。

我决定通过SSH与

git push 

远程仓库现在不再裸露,但有一个完整的工作目录,推动这种变化的远程仓库,而我得到的所有进一步的连续错误信息试图推动它。

我读过的一切似乎都表明我所做的是正确的,但它根本不起作用。我应该如何将更改推送到裸露的远程回购,并且实际上保持裸露

+0

顺便说一句,查看SCP风格的URL。 “ssh://[email protected]/~/TestRepo.git”变成“[email protected]:TestRepo.git”,它更清洁。 – zenazn 2009-10-10 21:21:39

+0

当它神奇地不光亮时,工作树在哪里走?通常,非裸存储库被称为'.git',并且存在于工作树的根目录中。不过,您的远程存储库称为TestRepo.git。 – 2009-10-10 21:47:05

+1

SCP风格的URL似乎不起作用,它们也没有使任何更清洁。 – 2009-10-11 20:53:29

回答

3

zip/unzip可能不会保留文件权限(例如可执行位),从而激活一些以前停用的挂钩。您可能需要检查服务器上的钩子权限,或者跳过整个zip部分,直接在服务器上直接创建裸仓库,然后使用常规的git push来上传我们的数据。

+0

你很近。它似乎保留了可执行位就好了,但我已经解压的hooks目录只包含.sample文件。所有这些文件中的所有内容都被注释掉了,所以我不知道可能会运行什么,但是如果我在服务器上执行init --bare,然后在本地执行“remote add origin”,则不会看到问题。在这种情况下,我在钩子目录中有更多的文件,但我不知道为什么。 本地机器和服务器都运行相同的Git版本,但本地是OS X,远程是RedHat或其他。 – 2009-10-11 03:14:19

+0

挂钩对机器是私人的,它们从不克隆,推或拉。示例钩子由您使用的任何版本的Git在本地创建。如果你的客户端和服务器有不同版本的Git,他们将创建不同的示例钩子。 – 2009-10-11 07:49:24

+0

嗯,我从来没有碰过任何地方的任何钩子目录,所以如果Git创建的东西不能移动到另一台机器,当我做一个现有的仓库的裸克隆,那肯定会闻到臭虫对我来说。 – 2009-10-11 14:31:28

4

这不应该发生。我的猜测是,有一些钩子脚本(可能是post-receive),这会导致签出 Git中存在错误。这两种情况都不太可能,但那是我能想象的唯一事情。