在git仓库的`.git`文件夹中,项目文件存储在哪里?

3
我为我的一些项目创建了一个远程仓库,因此它是我推送的目标。虽然这与git的理念相反,但它可以作为中央仓库。
但是当我进入服务器上的*.git文件夹时,会看到以下形式的目录结构:
 - /branches
 - /hooks
   - applypatch-msg.sample
   - commit-msg.sample
   - etc
 - /info
   - exlude
 - /objects
   - 06
   - 1c
   - various hex numbers
   - pack
 - /refs
   - /tags
   - /heads
     - master
 - config
 - description
 - HEAD

这里到底发生了什么,如果我研究git的内部运作方式,我一定能够弄清楚,但项目文件在哪里呢? 更新 我是按以下步骤创建仓库的:
  1. 有一个已存在的本地git仓库
  2. 将远程添加到本地 git remote add origin git@site.co.za:project_name.git
  3. 在服务器上,创建一个同名的基础仓库 'git init --bare project_name.git'
  4. 从本地推送到远程 git push origin master

与 Git 的理念相反,但它可以作为一个中央仓库。什么意思? - jthill
项目文件被打包为对象,并位于/objects/*。您可以查看它们,但需要使用git命令来执行此操作。您想要实现什么? - iveqy
我试图访问远程仓库(服务器的仓库)上的项目文件,但找不到它们。@VonC回答说没有我正在寻找的工作树。 - tread
2个回答

7
当你向一个裸仓库推送代码(参见 "关于“裸”仓库的一切 -- 什么是,为什么要使用以及如何解决非裸推送问题")时,你不会在该仓库中看到你的文件,因为根据定义它没有工作树。
你可以添加 post-receive hook (就像在这个post-receive hook中所示)来检出(并查看)你的文件:
/path/to/bare/repo.git/hooks/post-receive:

cd /path/to/bare/repo.git
GIT_WORK_TREE=/path/to/live/server git checkout -f

如果您只想查看存储在裸库中的文件列表(或其内容),甚至无需克隆该裸库,只需访问裸库服务器即可。请参见“从Git服务器访问存储库的文件”。
GIT_DIR=/path/to/bare.git git log --pretty=format: --name-only --diff-filter=A | sort | grep .

当推送到远程(非裸)时,我收到以下错误信息:remote: error: refusing to update checked out branch: refs/heads/master 默认情况下,在非裸仓库中拒绝更新当前分支,因为这会使索引和工作树与您推送的内容不一致,并且需要 'git reset --hard' 将工作树与 HEAD 匹配。 - tread
@StevieG,看起来它的设计是正常的。你能推送到一个裸仓库吗? - VonC
是的,当推送到非裸远程时会失败,但如果它是裸的,则可以正常工作。 - tread
@StevieG 没错。注意:如果你只想查看裸仓库中的文件列表,我已经编辑了答案,指出了一种可以做到这一点的方法。 - VonC

0

Git不会以你可以直接查看的方式存储你的文件。我猜你也能看出来 :)

你只能在git仓库的checkout中查看由git管理的文件。你需要告诉我们如何创建远程仓库,我们才能告诉你在远程服务器上可以查看哪个位置,但如果该远程仓库是“无头”的(即没有checkout),那么可能就“没有”。


更新问题并添加所需的额外细节。 - tread
好的 - 所以你创建了一个“裸”的仓库。这意味着在远程端没有文件被检出(这是一个相当明智的做法)。在这种情况下,你无法查看远程端的文件。 - GreenAsJade

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