GIT:无法将数据从本地推送到服务器

时间:2014-03-14 03:59:33

标签: git

我是Git的新手,可能这个问题是重复的,但我甚至无法为自己找到合适的答案。 我有一个专用服务器(考试:xxx.199.209.177) 我在我的本地计算机上有项目,所以现在我想提交并将我的更改推送到我的远程服务器。

这是我设置的一些步骤。 1)在远程服务器

cd /var/www/html/
$ mkdir test
$ cd test
$ mkdir .git
$ cd .git
$ git --bare init

在我的本地机器上

$ cd /srv/www/html/
$ git clone root@xxx.199.209.177:/var/www/html/test/.git
     warning: You appear to have cloned an empty repository.
$ cd test
// make some change here
$ git status
$ git add .
$ git commit -m "test"
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 217 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To root@xxx.199.209.177:/var/www/html/test/.git
 * [new branch]      master -> master]

但是当我回到远程主机时

$ cd test
$ ls -l
total 0

这里什么都没有

我想我错过了一些重要的步骤。

感谢。

3 个答案:

答案 0 :(得分:1)

使用非裸存储库,您的存储库存储在.git中,并且您在其外部工作树。

使用裸存储库时,只有一个存储实际存储库的目录,并且连接了 no 工作树。因此,您无法直接在裸存储库中查看文件。

通常如下工作:

server$ git init --bare /remote/path/test.git
client$ cd /local/path
client$ git clone user@server:/remote/path/test.git
client$ ls -la test

在这种情况下,您在/remote/path/test.git的服务器上有一个存储库,/local/path/test/.git的客户端上有另一个存储库,/local/path/test的客户端上有一个工作树。服务器上的裸存储库不会有工作树。


看起来您正在尝试使用git同步www服务器。这不会这样。 裸存储库没有显示文件的工作树,而非裸存储库git在推送后不会更改工作树。 (事实上​​,如果检出该分支,它将拒绝推送。)

您可能需要三个不同的存储库:

  • 您可以在其中更改文件的本地存储库。
  • 您将文件推送到
  • 的中央裸存储库
  • 用于从中央服务器提取的www-server的另一个非裸存储库。

如果您确实希望服务器存储库自动更新,则需要在中央存储库上创建一个钩子(在每次接收推送之后)更改到www存储库并提取更改。

答案 1 :(得分:0)

1)您不需要这些步骤

mkdir .git
$ cd .git

git --bare init命令将设置必要的.git文件夹和文件

2)运行ls -la而不是ls -l,因为-a选项不会隐藏以。开头的条目。

答案 2 :(得分:0)

使用的远程数据库初始化为裸存储库。这意味着它会将所有git特定存储在.git文件夹中,但它不会有工作目录。

这对于远程回购很常见,因为它们通常只能用于推/拉/克隆操作。

希望你明白这一点。您可以通过在远程服务器上运行git log来验证您的更改,该服务器应显示您最近的所有提交。