bitbucket 服务器在哪里存储存储库?

Where does bitbucket server store the repository?

背景:

不久前,我的公司决定托管我们自己的 Atlassian 产品,我们将源代码放在我们自己托管的 Bitbucket 服务器上。现在我们的虚拟机 (Windows Server 2012) 崩溃了,我们无法从外部访问 bitbucket。

由于一段时间内没有人开发我们的产品,我们不确定我们本地的代码是否是最新的。

问题:

我们需要获取最新版本的源代码,即使我们无法启动 bitbucket 服务器并且 运行。

我已经使用远程桌面连接到服务器,但似乎找不到文件。

问题

GIT 存储库的默认位置是什么? 除了 "git" 之外,是否有我可以搜索的文件夹可以让我到达正确的位置?

顺便说一句

我们正在转向托管服务...

祝一切顺利 /塔赫

Bitbucket 加密您的存储库,它们无法通过浏览作为文件使用。或者它们是但不是实际文件。

阅读此文档,它将描述内容的存储位置。

https://confluence.atlassian.com/bitbucketserver/bitbucket-server-home-directory-776640890.html

The Bitbucket home directory is where your Bitbucket Server data is stored.

git 内容存储在 data 文件夹中。每个存储库 gest 和 id 以及每个存储库的数据都存储在这个 id 文件夹中。每个包含裸存储库的文件夹都是一个 bare 存储库,因此您将无法查看内容。

获得课程访问权限后,您必须将其存储在其他地方,然后克隆它才能查看内容。

完全披露:我在 Atlassian 工作,曾担任 Bitbucket Server / Bitbucket Data Center 的高级支持工程师两年。顺便说一句,让我们开始吧:

正在查找您的存储库

Bitbucket Server 存储库存储在磁盘上的 $BITBUCKET_HOME/shared/data/repositories/<id>,其中 <id> 是在 repository table 中找到的存储库 ID你的数据库。假设您有一个包含 slug "jira" 和项目密钥 "ATLAS" 的存储库。 (slug 是您在 git 克隆 url 中看到的 url 安全名称;项目密钥是您的项目名称的大写缩写。)为了找到存储库 ID,您可以运行 以下数据库查询:

SELECT repository.id, repository.name, project.project_key
  FROM repository
  JOIN project ON project.id = repository.project_id
 WHERE repository.slug = 'jira'
   AND project.project_key = 'ATLAS';

有了ID,就可以从上面的路径中找到repository文件夹了。

如果由于某种原因您的数据库不可用,还有另一种方法。每个存储库都包含一个 repository-config 文件,其中包含存储库和项目名称。它的内容可能看起来像这样:

#>***********************************************
# THIS FILE IS MAINTAINED BY ATLASSIAN BITBUCKET
# IT CONTAINS NO USER-SERVICEABLE PARTS.
#>***********************************************
[bitbucket]
    hierarchy = 8597e1f873a45c2b9d3f
    project = ATLAS
    repository = jira

您可以使用任意数量的 bash 一行来查找您感兴趣的回购协议。这是我以前使用过的一个简单的方法,它只搜索存储库名称:

find $BITBUCKET_HOME/shared/data/repositories -mindepth 2 -maxdepth 2 -type f -name repository-config -print0 | xargs -0 grep "repository = jira"

对于 Windows,您可以将 findstr 与其他 Windows 命令行实用程序结合使用以达到类似的效果。

使用存储库

Bitbucket Server 中的存储库存储为裸存储库。在继续之前,了解差异很重要:

  • "Normal" 非裸存储库是您在使用 git clone <url> 克隆存储库或使用 git init 创建新存储库时看到的那种存储库。这种 repo 存储所有实际的 git 存储库数据,以及所有历史记录、修订、对象等在您工作目录的 .git 子文件夹中.这种存储库有一个 "work tree",这基本上意味着它拥有您正在处理的任何分支的所有文件 "checked out" 并且在您的工作目录中可用。 运行 ls .git 在本地机器上的一个 repo 中,你会看到 git repo 的内部是什么样子的。
  • 裸存储库没有工作树,也没有检出文件。您通常会在 .git 文件夹中看到的内容存在于裸仓库的顶层。 ls$BITBUCKET_HOME/shared/data/repositories 下的任何文件夹中,您会看到与在本地存储库 .git 中看到的相同类型的文件/文件夹文件夹。

Bitbucket 将 repos 存储为 "bare" 的原因很简单:没有在服务器端进行开发工作,因此不需要 "check out" 特定的分支或工作树来进行工作.

现在,尝试在 Bitbucket Server 中的裸存储库上执行任何操作是非常非常危险的。您正在绕过整个服务器机制及其所有内部业务逻辑,如果您尝试这样做,您很可能会破坏某些东西。最好的情况是您可以引入 Bitbucket 数据库中未考虑的更改并造成不一致,这将需要大量工作才能从中恢复。

您想做的和您一直想做的一样:克隆它! git 的优点在于它非常灵活。您可以 git 从文件路径克隆,就像从 URL 克隆一样。找到一种直接从工作站访问裸存储库的方法,方法是远程安装磁盘,或者只需将相关的 <id> 存储库文件夹复制到本地计算机即可。然后克隆它! git clone $BITBUCKET_HOME/shared/data/repositories/<id> mylocalworkingcopy 会将你的裸仓库克隆到一个名为 mylocalworkingcopy 的新文件夹中,并检查默认分支。你可以在这里做任何你需要做的事情。

警告:不要推迟您的更改。推送 工作,但要么将更改推送到虚拟副本,要么将更改直接推送到服务器,绕过 Bitbucket,并引入提交、分支和对象未被 Bitbucket Server 跟踪。这就是我上面提到的不一致状态。这是您可以从中恢复过来的事情,但它会使颈部疼痛,最好避免。