标签: git-bare

远程裸机上的Git子模块

我已经设置了我的环境,所以我可以推送到远程裸存储库,我使用这些命令来设置远程存储库:

$ mkdir ~/website.git && cd ~/website.git
$ git init --bare
Run Code Online (Sandbox Code Playgroud)

$ cat > hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/var/www/website git checkout -f

$ chmod +x hooks/post-receive
Run Code Online (Sandbox Code Playgroud)

在我的本地环境中:

$ git remote add web ssh://website.com/home/website.git
$ git push web +master:refs/heads/master
Run Code Online (Sandbox Code Playgroud)

现在我可以部署到这个远程使用git push web,一切都很好..

问题:子模块

我的项目中有一些子模块没有在远程存储库中初始化/更新...我无法git submodule update在裸机上运行,因为它是裸的,我不能在/var/www/website文件夹上运行它,因为它只是一个副本的文件而不是git repo.

git git-submodules git-bare

23
推荐指数
3
解决办法
9004
查看次数

不能通过http克隆git repos; info/refs not found

我试图使git存储库可用于通过http进行只读访问.

我这样做是旧式的,因为git-http-backend我的主机系统不可用.也就是说,我只是将裸存储库放在http可访问的位置.

我使用在主机上成功创建了裸存储库git clone --bare <some-remote-location>.

现在,当我使用git指向新克隆时git clone http://my.host.name/location,会显示一条消息repository not found.

当我捕获网络流量时,我看到git正在尝试访问http://my.host.name/location/info/refs.由于info/refs存储库中没有路径,因此预计会失败.而是存储库根目录下的inforefs目录.

显然,克隆的裸存储库的结构不符合客户的预期.有谁知道为什么会这样?

git clone http repository git-bare

21
推荐指数
2
解决办法
2万
查看次数

如何使用git-archive包含裸存储库中的子模块

我正在设置部署脚本.基本过程是:

  1. 将更改推送到服务器上的裸存储库
  2. 然后基于新标签将为该版本创建一个新文件夹.
  3. 使用git archive将文件移动到release目录中
  4. 运行一些迁移脚本并将其置于活动状态(如果一切都成功).

问题是我的存储库包含一个子模块,它不会被放入存档中,因此不会放入发布目录中.

我见过git-archive-all,但这不适用于裸存储库.

如果不可能,我正在考虑,

  1. 使存储库不是裸露的,并更新工作副本,这将允许我使用git-archive-all.要么
  2. 在服务器上有一个子模块的第二个裸存储库,我可以从中获取存档(必须查看这个以确保我得到正确的修订).

git deployment git-submodules git-bare

18
推荐指数
2
解决办法
2万
查看次数

克隆空的*bare*git存储库最简单的方法是什么?

我刚刚完成了谷歌搜索结果的巡航,其中包含所有关于git无法克隆空存储库的愚蠢行为的电子邮件.某种灵魂甚至提交了补丁.在git升级之前,克隆空的 git存储库的最简单,最直接的方法是什么?

理想的解决方案将支持为-o远程repo提供除名称以外的名称的选项origin,并且它可以作为简单的shell脚本实现,例如,git-clone-empty-repo.

(为什么我要这样做:我在我们的NetApp文件管理器上设置了一个空的,空的git repo,它将被备份,但是我想在我的本地硬盘驱动器上使用克隆并来回推拉与我合作的其他人也会这样做.我创建了很多新的git repos,我无法克隆一个空的回购让我发疯.)


编辑:VonC的线程表明

$ git-init
$ git-remote add origin server:/pub/git/test.git
Run Code Online (Sandbox Code Playgroud)

当repo为空时,相当于克隆远程仓库.这不是我想要的,因为我总是使用-ogit clone 的选项; 我根据它所使用的机器或其他一些令人难忘的标准命名远程仓库.(如果他们全部被叫,我有太多的回购,以保持他们的直线origin.)


编辑:以下答案将被标记为接受:-)

要在路径上克隆一个空的裸仓库,

  1. 保持~/git/onefile一个非裸git repo包含一个无害的文件,如.gitignore.(或者,动态创建这样的仓库.)
  2. (cd ~/git/onefile; git push 路径 master)
  3. git clone -o 名称 路径

换句话说,不要尝试克隆空仓库,而是在创建它之后,向它推送一个包含一个无害文件的简单仓库.然后它不再是空的,可以克隆.

如果有人没有打败我,我会发布一个shell脚本.

git clone git-bare

17
推荐指数
1
解决办法
3万
查看次数

什么是裸存储库,为什么我需要它?

这可能已经得到了回答,但我没有找到一个好的答案.
我来自集中式存储库,例如SVN,通常您只执行检出,更新,提交,还原,合并等等.

Git让我发疯.有很多命令,但最难理解的是为什么很多东西都像他们一样工作.

根据"什么是裸git存储库?" :

使用创建的存储库git init --bare称为裸存储库.它们的结构与工作目录略有不同.首先,它们不包含源文件的工作或签出副本.
...
创建的裸存储库git init --bare用于... 共享....开发人员将克隆共享裸仓库,在其仓库的工作副本中进行本地更改,然后回退到共享裸仓库以使其他用户可以使用其更改.
- Jon Saints,http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/

但是,从接受的答案"github存储库和git裸存储库之间有什么区别?" :

GitHub上的Git repos是裸的,就像你要推送到[sic]的任何远程仓库一样.
- VonC,https://stackoverflow.com/a/20855207

但是,在GitHub中有源文件.我可以看到他们.如果我创建一个裸存储库,则没有源文件,只有.git工作存储库目录的内容.

这怎么可能?我不明白什么?

您能举例说明为什么我需要一个裸存储库及其以这种方式工作的动机吗?

UPDATE

爱德华汤姆森的回答部分是我想知道的.不过,我会重新提出我的问题:

我发布了第一个链接状态("什么是裸git存储库?"):

它们[裸存储库]不包含源文件的工作或签出副本.

VonC的回答:

GitHub上的Git repos是裸的

两个陈述暗示

Github没有工作副本.

爱德华汤姆森说:

它会在您浏览数据时根据数据呈现网页 - 将数据直接从存储库中提取出来并输出到您的Web浏览器,而不是先将数据写入文件服务器上的磁盘

不知何故,裸存储库必须包含所有数据和源代码.如果没有,那么渲染任何东西都不是不可能的,因为我可以看到所有源代码更新(提交),所有分支(具有各自的源),回购的整个日志等.

存储库的整个数据是否始终位于.git目录(或裸存储库)中,以某种格式可以随时呈现所有文件?这是裸存储库的原因,而工作副本只在给定时间有文件吗?

git github git-bare

15
推荐指数
1
解决办法
4465
查看次数

Git - Bare repo不能拥有主分支的工作树 - 为什么?

我正在研究一些服务器端软件来进行合并.通过使用git worktree它可以检查给定分支的裸仓库并将另一个分支合并到其中.即使有大型存储库,它也非常快.

唯一的例外似乎是合并master.当我这样做时,git worktree add /tmp/path/to/worktree master我收到一个错误:

致命:'master'已在'/ path/to/bare/repo'检出

但这显然不正确,git worktree list给出:

/ path/to/bare/repo(bare)

...当然,在那条路上没有工作树,只有你期望的裸仓库文件.

更新:我与git维护者联系,他们同意这可能是一个错误.我有一个初步补丁来测试.此外,我还能够在没有补丁的情况下重现所需的行为.

在这一点上,我不完全确定边界条件或根本原因是什么,并且可能会有来自git的修复.

git version-control merge git-bare git-worktree

14
推荐指数
1
解决办法
1210
查看次数

Git - 在init目录中初始化了

git --bare init在一个错误的目录(在服务器中)运行.我在该目录中看到文件branches,config,deps等..如何撤消它?

git undo git-bare

11
推荐指数
2
解决办法
7845
查看次数

git裸存储库中的"fetch --all"不会将本地分支与远程分支同步

我正在尝试定期同步git裸存储库,我的本地分支使用"--track"选项创建.这是我的配置(没有不必要的东西):

[core]
        bare = true
[remote "origin"]
        url = git@github.com:Ummon/D-LAN.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "website"]
        remote = origin
        merge = refs/heads/website
Run Code Online (Sandbox Code Playgroud)

我必须使用'cp'命令来更新本地分支:

 git fetch --all
 cp -r refs/remotes/origin/* refs/heads
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?

git git-fetch git-bare

10
推荐指数
1
解决办法
9136
查看次数

git在一个裸存储库中合并分支

我想为我的git repos创建以下设置:

我目前有一个包含所有工作文件的本地git仓库.我希望能够设置一个中央裸存储库和另外两个非裸存储库 - 一个用于实时应用程序,另一个用于测试版本.

我希望能够在测试分支上将更改从本地更改为中央裸仓库.然后,在我的测试存储库中,总是从裸存储库的测试分支拉出来.

当准备好接受更改时,我希望能够将我的测试分支和我的主分支合并到中央裸存储库中.然后现场回购可以从主分支拉出来.

所以在这个方案中,测试repo总是会从测试分支中获取,而实时repo将始终从主分支中获取.

我无法弄清楚如何在裸存储库中合并分支.没有工作树,git-merge和git-checkout似乎不起作用.

所以,我的问题是双重的:

  1. 有没有一种标准方法可以在一个裸仓库中合并分支?
  2. 这不是直截了当的,因为我的回购设置很差吗?(在这种情况下,您如何修改此体系结构以获得最佳实践?)

git merge git-bare

10
推荐指数
2
解决办法
7652
查看次数

Git bare - 要备份什么?

如果其他地方有这个问题我很抱歉,但我找不到答案.

我有一个名为bare.git的裸仓库,它是克隆dev开发者的存储库.这一切都运作良好.

我想知道bare.git从哪里获取源文件.它们是否作为二进制文件存储在bare.git文件结构中?我可以将bare.git移动到另一个位置并仍然克隆repos,因此源必须在某种程度上是可移植的.或者它是否存储文件的绝对网络引用?

我想知道这些信息有三个主要原因:

  1. 我们需要知道要备份什么.
  2. 我的老板想知道源代码的去向.
  3. 我们需要一个当前的复合版本进行测试.

git backup git-bare

8
推荐指数
2
解决办法
1987
查看次数