我是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
这里什么都没有
我想我错过了一些重要的步骤。
感谢。
答案 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存储库并提取更改。
答案 1 :(得分:0)
1)您不需要这些步骤
mkdir .git
$ cd .git
git --bare init
命令将设置必要的.git文件夹和文件
2)运行ls -la
而不是ls -l
,因为-a选项不会隐藏以。开头的条目。
答案 2 :(得分:0)
使用的远程数据库初始化为裸存储库。这意味着它会将所有git特定存储在.git
文件夹中,但它不会有工作目录。
这对于远程回购很常见,因为它们通常只能用于推/拉/克隆操作。
希望你明白这一点。您可以通过在远程服务器上运行git log
来验证您的更改,该服务器应显示您最近的所有提交。