Skip to content

fuubi/node-git-http-backend

Repository files navigation

Node Git HTTP Backend

This module makes the git-http-backend functionalities available for Node.js HTTP Servers, by piping the HTTP Request through the Common Gateway Interface (CGI). It does not set all variables defined by RFC 3875. Instead, it only defines the minimum set of variables required by the git-http-backend.

Usage

  1. Install git-core

    • $sudo apt-get install git-core (for Ubuntu)
  2. Check if you can run the command git-http-backend

    • Run $/usr/lib/git-core/git-http-backend
      • This path may differ for you.
    • Should output:
      • Status: 500 Internal Server Error
        Expires: Fri, 01 Jan 1980 00:00:00 GMT
        Pragma: no-cache
        Cache-Control: no-cache, max-age=0, must-revalidate
        
      • Hopefully, this is the last error message you see 😉.
  3. Create a bare git repository

    • Run $git init --bare /home/alice/cool-stuff.git
    • Run $git update-server-info
      • Updates the auxiliary info file to help dumb servers (more info).
    • Run $git config http.receivepack true
      • This serves git send-pack clients, allowing push (more info).
  4. Serve /home/alice/cool-stuff.git with your Node.js HTTP Server

    • This example uses the default config and handler to create the server.
    •   import * as http          from 'http'
        import {
            defaultConfig ,
            requestHandler
        } from 'node-git-http-backend'
      
        const config = defaultConfig (
            '/usr/lib/git-core/git-http-backend' ,
            '/home/alice/cool-stuff.git'
        )
      
        http.createServer ( requestHandler ( config ) )
            .listen ( 3333 ,
                      () => console.log (
                          `Git backend listening to port 3333.\n` +
                          'If you ran, "npm run-script init-dev-env".\n' +
                          'You should be able to clone the test repository with:\n' +
                          'git clone http://localhost:3333/test.git' 
                          ) 
            )
    • Usually, it is not desired to let everybody push to a repository 😈. Therefore you have to implement some middleware logic that makes sure only authenticated users are allowed to pull or push, depending on how you want the repository to be accessible. Please have a look at the git-http-backend documentation.

Dev

Just run the following commands.

npm run-script init-dev-env
npm run-script dev

Credits and References

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published