Git远程仓库没有显示文件

4
我已经设置了一个远程git仓库,并将本地仓库推送到了远程仓库。这一步骤如预期一样成功了,但是在远程仓库中,我没有看到与该项目相关的文件,只有branchesconfigdescriptionHEAD等文件。

请问实际的项目文件在哪里?

以下是我所做的操作:

远程服务器:

cd /var/www/directory
git --bare init

本地项目(在git仓库中):

git remote add remote root@IP:/var/www/directory
git push remote master

操作成功,它按照预期被推送。但是当我进入/var/www/directory时,只有与git相关的文件,项目文件并不存在。


请提供用于添加git远程,合并更改和将提交推送到远程的git命令?您是否将本地分支上的提交与远程分支合并? - Jay
刚刚更新了我的问题,谢谢。 - dzm
2个回答

2

正如@Schleis指出的那样,这是一个裸仓库。你的提交实际上已经存在了。你看不到它们,因为它们被存储为git blob文件。你可以通过运行 git log 来验证你的提交是否存在。它应该显示与本地仓库中相同的 commit sha

$ cd server

(BARE:master)$ git log
commit 19b7105fac9e44d0130d662d3d372340b0e9faea
Author: Jevgeni Zelenkov <jevgeni.zelenkov@gmail.com>
Date:   Wed Dec 11 16:21:36 2013 +0100

    init

$ cd ../local

(master)$ git log
commit 19b7105fac9e44d0130d662d3d372340b0e9faea
Author: Jevgeni Zelenkov <jevgeni.zelenkov@gmail.com>
Date:   Wed Dec 11 16:21:36 2013 +0100

    init

从 Git 1.7.0 版本开始,只有 --bare 存储库才能接受推送和拉取命令。因此,如果您想将 git 存储库用作服务器,则必须使用 --bare


git-show 是用于处理 git 内部的通用命令。 git show man page


2
你创建了一个“裸”的仓库。它不包含文件,只包含有关提交的信息。
在 Git 中,“裸”仓库只包含版本控制信息,没有工作文件(没有树状结构),也不包含特殊的 .git 子目录。相反,它直接在主目录中包含 .git 子目录的所有内容。

http://bitflop.com/document/111

看起来你想要推送以部署你的更改。相反,你应该在/var/www/directory中创建一个非裸库,并从开发库或裸库中拉取。这样你就会在你的位置上有一个非裸库,当你想要部署更新时,你将从目录中运行git pull来更新文件。这也将允许你轻松地将代码移动到以前的版本,如果最后的更新存在重大问题,可以使用git checkout <SHA>

谢谢,如果我创建了一个非 bare 的仓库,但是当我 push 到它时,出现 [remote rejected] master -> master (branch is currently checked out) 的错误提示。 - dzm
我有点困惑你所说的从开发存储库或裸存储库中拉取是什么意思。我们有5个服务器需要“部署”。我希望能够将代码推送到所有这些远程存储库以进行部署。 - dzm
@dave,你的文件被 Git 存储为特殊的 blob 对象。你可以使用低级别的 Git 命令来访问它们。 - Jay
@dave 不是那种形式。你可以设置另一个非裸的git存储库,你的服务器将使用它来运行一些真实代码的任务。本质上,你想要分离关注点:一个(裸)git存储库用作git托管,另一个(非裸)用于运行一些任务(CI?)。你可以在同一台机器上拥有git托管服务器和执行操作的服务器,但不能在同一个git存储库中。 - Jay
@jzelenkov,那我应该将代码推送到裸仓库,然后在非裸仓库中拥有代码?当向裸仓库进行推送时,会运行一些任务以更新非裸仓库中的代码?也许只需有一个任务通过ssh连接到远程服务器并拉取代码会更容易? - dzm
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接