All Projects → adobe → git-server

adobe / git-server

Licence: Apache-2.0 License
A GitHub Protocol & API emulation

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to git-server

Gitzilla
A resume builder for your GitHub profile.
Stars: ✭ 60 (-11.76%)
Mutual labels:  github-api
glare
gracefully download (latest) releases from GitHub
Stars: ✭ 64 (-5.88%)
Mutual labels:  github-api
mighty-watcher
Open source made easier
Stars: ✭ 44 (-35.29%)
Mutual labels:  github-api
getmein-web
Portal to get an invite to IIITV GitHub organization
Stars: ✭ 26 (-61.76%)
Mutual labels:  github-api
quick-add-github-issue-browser-extension
Quickly add GitHub issues direct from a browser button
Stars: ✭ 14 (-79.41%)
Mutual labels:  github-api
travis-activate
Activates Travis-CI builds for all repos in a given GitHub project
Stars: ✭ 20 (-70.59%)
Mutual labels:  github-api
twitch-graphql-api
KomodoHype
Stars: ✭ 78 (+14.71%)
Mutual labels:  helix
helix-cli
Command-line tools for developing with helix
Stars: ✭ 25 (-63.24%)
Mutual labels:  helix
commit-comment
A GitHub action to create a comment for a commit on GitHub
Stars: ✭ 62 (-8.82%)
Mutual labels:  github-api
vue-blog
使用 Vue 和 Github Issues 搭建的 SPA Blog
Stars: ✭ 18 (-73.53%)
Mutual labels:  github-api
GitHubSearch
GitHub iOS client with minimum third-party dependencies.
Stars: ✭ 34 (-50%)
Mutual labels:  github-api
meet-the-fans
Query and Visualize the network graph of your GitHub repositories, followers, stargazers, and forks.
Stars: ✭ 22 (-67.65%)
Mutual labels:  github-api
github-trending-plus
✨ Experimental Github trending UI
Stars: ✭ 61 (-10.29%)
Mutual labels:  github-api
GitHub-Stalker
track your GitHub statistics with Pandas
Stars: ✭ 31 (-54.41%)
Mutual labels:  github-api
action-sync-node-meta
GitHub Action that syncs package.json with the repository metadata.
Stars: ✭ 25 (-63.24%)
Mutual labels:  github-api
karmahub
Compares the amount of issues and pull requests you created with the amount of comments and code reviews you did.
Stars: ✭ 17 (-75%)
Mutual labels:  github-api
twgitbot
A node.js bot that checks a github repo changes and tweets it to your Twitter account
Stars: ✭ 10 (-85.29%)
Mutual labels:  github-api
ghexport
Export your Github activity: events, repositories, stars, etc.
Stars: ✭ 18 (-73.53%)
Mutual labels:  github-api
github-vacations
Automagically ignore all notifications related to work when you are on vacations
Stars: ✭ 20 (-70.59%)
Mutual labels:  github-api
Track-Stargazers
Have fun tracking your project's stargazers
Stars: ✭ 38 (-44.12%)
Mutual labels:  github-api

git-server

A GitHub Protocol & API emulation.


Status

codecov CircleCI GitHub license GitHub issues Renovate enabled Language grade: JavaScript semantic-release

Description

git-server serves a hierarchy of local Git repositories to Git clients accessing the repository over http:// and https:// protocol.

git-server expects the local Git repositories (either cloned or created with git init) to be organized as follows in the local file system:

<repos_root_dir>/
├── <owner_1>/
│   └── <repo_1>
│   └── <repo_2>
├── <owner_2>/
│   └── <repo_1>
│   └── <repo_2>

Alternatively, a virtual repository mapping allows to 'mount' repositories independent of their location in the file system into a <owner>/<repo> hierarchy. A configuration example:

  virtualRepos: {
    owner1: {
      repo1: {
        path: './repo1',
      },
    },
    owner2: {
      repo2: {
        path: '/repos/repo2',
      },
    },
  },

Repositories exposed via git-server can be used just like any repository hosted on GitHub, i.e. you can clone them and push changes to. The repository contents can be accessed with the same url patterns you would use to request files managed on GitHub.

The following protocols and APIs are currently supported:

Installation

cd <checkout dir>
npm install

Getting started

git-server is configured via the config.js file which is expected to exist in the current working directory. Here's the default configuration:

{
  appTitle: 'Helix Git Server',
  repoRoot: './repos',
  // repository mapping. allows to 'mount' repositories outside the 'repoRoot' structure.
  virtualRepos: {
    demoOwner: {
      demoRepo: {
        path: './virtual/example',
      },
    },
  },
  listen: {
    http: {
      port: 5000,
      host: '0.0.0.0',
    },
    /*
    // https is optional
    https: {
      // cert: if no file is specfied a selfsigned certificate will be generated on-the-fly
      // cert: './localhost.crt',
      // key: if no file is specfied a key will be generated on-the-fly
      // key: './localhost.key',
      port: 5443,
      host: '0.0.0.0',
    },
    */
  },
  subdomainMapping: {
    // if enabled, <subdomain>.<baseDomain>/foo/bar/baz will be
    // resolved/mapped to 127.0.0.1/<subdomain>/foo/bar/baz
    enable: true,
    baseDomains: [
      // some wildcarded DNS domains resolving to 127.0.0.1
      'localtest.me',
      'lvh.me',
      'vcap.me',
      'lacolhost.com',
    ],
  },
  logs: {
    level: 'info', // fatal, error, warn, info, verbose, debug, trace
    logsDir: './logs',
    reqLogFormat: 'short', // used for morgan (request logging)
  },
}

git-server uses helix-log for logging. The log level (fatal, error, warn, info, verbose, debug, trace) can be set via the logs.level property in the config (see above). For more information please refer to the helix-log project.

1. Create a local Git repository

cd ./repos
# create org
mkdir helix && cd helix
# initialize new git repo
mkdir test && cd test && git init
# allow to remotely push to this repo
git config receive.denyCurrentBranch updateInstead
# add a README.md
echo '# test repo'>README.md
git add . && git commit -m '1st commit'
cd ../../..

2. Start server

npm start

3. Fetch raw content of file in Git repo over http

curl http://localhost:5000/raw/helix/test/main/README.md

Git Protocols and APIs

1. Git Raw Protocol

Serving content of a file in a git repo.

The requested file is specified by:

  • {owner}: GitHub organization or user
  • {repo}: repository name
  • {ref}: Git reference
    • branch name (e.g. main)
    • tag name (e.g. v1.0)
    • (full or shorthand) commit id (e.g. 7aeff3d)

GitHub URLs:

  • https://raw.githubusercontent.com/{owner}/{repo}/{ref}/path/to/file
  • https://github.com/{owner}/{repo}/raw/{ref}/path/to/file

Local git-server URLs:

  • http://localhost:{port}/raw/{owner}/{repo}/{ref}/path/to/file
  • http://localhost:{port}/{owner}/{repo}/raw/{ref}/path/to/file
  • http://raw.localtest.me:{port}/{owner}/{repo}/{ref}/path/to/file (using wildcarded DNS domain resolving to 127.0.0.1)

Remote examples:

  • https://raw.githubusercontent.com/adobe/git-server/main/README.md
  • https://github.com/adobe/git-server/raw/main/README.md

Local examples:

  • http://raw.localtest.me:5000/adobe/git-server/main/README.md
  • http://localhost:5000/adobe/git-server/raw/main/README.md
  • http://localhost:5000/raw/adobe/git-server/main/README.md

raw.githubusercontent.com serves certain file types (e.g. JavaScript, CSS, HTML) with incorrect Content-Type: text/plain header. 3rd party solutions like rawgit.com address this issue. git-server serves files with correct content type.

2. Git HTTP Transfer Protocols

Support for git clone, push, fetch

Documentation:

git push support

The served local repo needs to be either a bare repo (git clone --bare or git init --bare) or the following option needs to be set:

git config receive.denyCurrentBranch updateInstead

more information

3. GitHub API v3

Documentation: GitHub API v3

GitHub Endpoint: https://api.github.com/

Local endpoint: http://localhost:{port}/api or e.g. http://api.localtest.me:{port} (using wildcarded DNS domain resolving to 127.0.0.1)

Only a small subset of the GitHub API will be supported:

  • Get contents

    Note: The GitHub implementation supports files up to 1 megabyte in size.

  • Get blob

    Note: The GitHub implementation supports blobs up to 100 megabytes in size.

  • Get tree

  • Get commits

  • Get archive link

    Note: This method returns a 302 to a URL to download a tarball or zipball archive for a repository. git-server also supports an unofficial https://codeload.github.com endpoint that is not rate limited and that doesn't redirect:

    • https://codeload.github.com/{owner}/{repo}/[zip|tar.gz]/main

    Related issue/discussion: #5 Support codeload.github.com

Local examples:

  • http://api.localtest.me:5000/repos/adobe/git-server/contents/README.md?ref=main
  • http://api.localtest.me:5000/repos/adobe/project-helix/git/blobs/bf13fe66cbee379db6a3e4ebf0300b8bbc0f01b7
  • http://localhost:5000/api/repos/adobe/git-server/contents/README.md?ref=main
  • http://localhost:5000/api/repos/adobe/project-helix/git/blobs/bf13fe66cbee379db6a3e4ebf0300b8bbc0f01b7

4. GitHub-like Web Server

(not yet implemented)

Endpoint: https://github.com/

e.g.

https://github.com/{owner}/{repo}, https://github.com/{owner}/{repo}/blob/{branch}/path/to/file

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].