1

我正在尝试在我的本地设置一个中央存储库,在 NodeJS 上运行,其他人可以访问、创建自己的 git 存储库、克隆、提交、推送、从他们的 git 存储库中提取。这个想法更像是设置一个在 NodeJS 上运行的本地 Github。我目前正在使用nodegit库。

我可以git init --bare通过使用创建一个新的存储库 () ,还可以使用Git.Repository.init(repopath, is_bare)为该存储库 () 设置自定义克隆 urlgit remote set-urlGit.Remote.setUrl(repository, remote, cloneUrl)

但我坚持创建像“http://example.com/repo/example.git”这样的克隆 URL。如何在 NodeJS 中创建一个其他人可以用来 git clone 的 repo URL?它应该指向哪里?我应该为 repo URL 提供什么样的响应?

目前我的代码如下:

var Git = require('nodegit');
var path = require('path');
var fs = require('fs');

exports.repo_create = function(req, res) {
  // Create repository folder if doesn't exist which will include all repos.
  const dir = path.join(__dirname, '/../../repository');
  if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir);
  }

  if (typeof req.body.reponame !== 'undefined' && req.body.reponame !== null) {
    
    // Creating req.body.reponame folder under repository folder.
    // repository/{req.body.reponame}
    const repopath = path.join(dir, req.body.reponame);
    if (!fs.existsSync(repopath)) {
      fs.mkdirSync(repopath);
    }
    
    var is_bare = 1;
    // Initialising bare repo.
    Git.Repository.init(repopath, is_bare).then(function(repository) {
      const remote = 'origin';
      var cloneUrl = req.protocol + '://' + req.get('host') + '/repos/' + req.body.reponame + '.git';
      
      // Setting http://www.example.com/repos/example.git as repo url for individual git repo under repositories/example folder.
      Git.Remote.setUrl(repository, remote, cloneUrl);
      
      // Sending JSON response from Node API.
      res.json({ status: 'SUCCESS', message: req.body.reponame + ' repository created' });
    }).catch(function(error) {
      // Sending JSON response from Node API.
      res.json({ status: 'FAILURE', message: error });
    });
  } else {
    // Sending JSON response from Node API.
    res.json({ status: 'FAILURE', message: 'Failed to create repository' });
  }
}

任何帮助表示赞赏!

4

0 回答 0