问题标签 [git-bare]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
32276 浏览

git - 克隆一个空的 *bare* git 存储库最直接的方法是什么?

我刚刚浏览完谷歌搜索结果,其中包含所有关于 git 无法克隆空存储库是多么愚蠢的电子邮件咆哮。某个善良的灵魂甚至提交了补丁。在 git 升级之前,克隆一个空的裸git 存储库的最简单、最直接的方法是什么?

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

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


编辑:VonC 的线程表明

相当于repo为空时克隆远程repo。这不是我想要的,因为我总是使用-ogit clone 的选项;我根据远程仓库所在的机器或其他一些令人难忘的标准来命名远程仓库。(如果它们都被调用的话,我有太多的存储库无法保持它们的正确性origin。)


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

要在path克隆一个空的、裸仓库,

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

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

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

0 投票
3 回答
10016 浏览

git - 创建将在服务器上的 git 存储库时,我可以将其转换为裸存储库吗?

我已经创建了一个存储库。我可以让它成为一个裸类型还是我应该重新开始?

0 投票
18 回答
243541 浏览

git - 如何将普通的 Git 存储库转换为裸存储库?

如何将“普通”Git 存储库转换为裸存储库?

主要区别似乎是:

  • 在普通的 Git 存储库中,存储库中有一个.git文件夹,其中包含所有相关数据和构成工作副本的所有其他文件

  • 在裸 Git 存储库中,没有工作副本,并且文件夹(我们称之为repo.git)包含实际的存储库数据

0 投票
1 回答
3432 浏览

git - 推送到裸 Git 存储库时出现“receive.denyCurrentBranch”错误

有一个远程 git 裸仓库,我从一台机器上推送了一个分支,然后拉到另一台机器上。

在另一台机器上进行了一些更改,试图将这些更改推送回远程裸仓库,我收到“receive.denyCurrentBranch”错误。

这是怎么回事?

这不应该发生在裸回购上 - 没有任何检查。

从机器 2 看到的分支是:

“修复”是两台开发机器上的当前分支。

当我最初在机器 2 上拉出那个分支时,我做了:

我怀疑第一条“远程”行 - 似乎 HEAD 应该指向我当前的分支,但事实并非如此。觉得我错过了什么,在这里..

更新 1 我将 'Fix' 分支合并到 dev1 分支,然后推送 'dev1' 分支 - 工作正常(无论如何我正要这样做)。

所以,这是一种解决方法,但我认为真正的问题是 HEAD 没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1')。我不确定如何更改远程仓库的头部?

0 投票
3 回答
2021 浏览

git - Git 裸机 - 要备份什么?

如果这在其他地方有所涉及,我很抱歉,但我找不到答案。

我有一个名为 bare.git 的裸仓库,它是从中克隆开发仓库的仓库。这一切都很好。

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

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

  1. 我们需要知道要备份什么。
  2. 我的老板想知道源代码到哪里去了。
  3. 我们需要一个当前的复合版本进行测试。
0 投票
4 回答
38525 浏览

git - 如何取消提交 git 裸存储库中的最后一次提交?

考虑到有几个 git 命令在裸存储库中没有意义(因为裸存储库不使用索引并且没有工作目录),

不是取消提交此类存储库中最后一次更改的解决方案。

在互联网上搜索,我能找到与该主题相关的所有内容都是this,其中向我展示了三种方法:
1.“手动更新 ref(涉及管道)”;
2.“git push -f来自非裸存储库”;
3.“ git branch -f this $that”。

您认为哪种解决方案更合适,或者有什么其他方法可以做到这一点?不幸的是,我发现的关于 git 裸存储库的文档相当糟糕。

0 投票
6 回答
22387 浏览

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

我正在设置部署脚本。基本流程是:

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

问题是我的存储库包含一个子模块,它没有放入存档中,因此没有放入发布目录。

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

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

  1. 使存储库不裸露,并更新工作副本,这将允许我使用 git-archive-all。或者
  2. 在服务器上有第二个子模块的裸存储库,我可以从中获取存档(必须对此进行调查以确保获得正确的修订版)。
0 投票
11 回答
115504 浏览

git - 裸存储库和非裸存储库之间的实际区别是什么?

我一直在阅读 Git 中的裸机和非裸机/默认存储库。我一直无法很好地理解(理论上)它们之间的差异,以及为什么我应该“推送”到一个裸存储库。这是交易:

目前,我是唯一一个在 3 台不同的计算机上从事一个项目的人,但以后会涉及到更多的人,所以我使用 Git 进行版本控制。我在所有计算机上克隆了裸存储库,当我完成对其中一台计算机的修改时,我提交并将更改推送到裸存储库。根据我的阅读,裸存储库没有“工作树”,因此如果我克隆裸存储库,我将没有“工作树”。

我猜测工作树存储了项目中的提交信息、分支等。那不会出现在裸仓库中。因此,对我来说,使用工作树将提交“推送”到 repo 似乎更好。

那么,我为什么要使用裸存储库,为什么不呢?有什么实际区别?我想,这对更多从事项目工作的人没有好处。

你对这种工作有什么方法?建议?

0 投票
1 回答
10630 浏览

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

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

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

有没有更优雅的解决方案?

0 投票
1 回答
1146 浏览

git - 如何在现有的裸存储库中创建 reflogs 信息

您可能已经知道,默认情况下,git 不会为新的裸存储库启用 reflog 更新。问题是,我有一个很长的历史存储库,但它是在我设置标志“logAllRefUpdates”之前创建的,现在我希望该信息可以让另一个应用程序工作。

如何通过对现有存储库进行最小更改来实现这一点。一个非常简单的解决方案是推送一个我不想的新提交(!):-)