{"id":13453506,"url":"https://github.com/yuki-kimoto/gitprep","last_synced_at":"2025-05-14T20:10:27.404Z","repository":{"id":5614821,"uuid":"6822358","full_name":"yuki-kimoto/gitprep","owner":"yuki-kimoto","description":"Portable GitHub system into your own server","archived":false,"fork":false,"pushed_at":"2025-01-07T07:12:24.000Z","size":5433,"stargazers_count":924,"open_issues_count":12,"forks_count":118,"subscribers_count":61,"default_branch":"master","last_synced_at":"2025-04-13T17:46:42.490Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://gitprep.yukikimoto.com/","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yuki-kimoto.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"Copying","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-11-23T04:32:46.000Z","updated_at":"2025-04-11T13:36:18.000Z","dependencies_parsed_at":"2024-07-15T00:23:48.936Z","dependency_job_id":"7d5f9abc-f77e-43b7-bde3-50cde160a2b2","html_url":"https://github.com/yuki-kimoto/gitprep","commit_stats":{"total_commits":1465,"total_committers":37,"mean_commits":39.5945945945946,"dds":"0.13447098976109217","last_synced_commit":"3e7f91b67daf78de8a167f5b22d84a403906a6b5"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuki-kimoto%2Fgitprep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuki-kimoto%2Fgitprep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuki-kimoto%2Fgitprep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuki-kimoto%2Fgitprep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yuki-kimoto","download_url":"https://codeload.github.com/yuki-kimoto/gitprep/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254219374,"owners_count":22034397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T08:00:41.597Z","updated_at":"2025-05-14T20:10:27.378Z","avatar_url":"https://github.com/yuki-kimoto.png","language":"Perl","funding_links":[],"categories":["Perl","Tools for Self-Hosting","Software","others"],"sub_categories":["Development","Software Development - Project Management"],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"gitprep-logo.svg\" width=\"200\" height=\"200\" alt=\"[GitPrep logo]\" /\u003e\u003c/p\u003e\n\n# GitPrep - Portable GitHub system on your own server\n\nGitPrep is a **portable Github system**, which can be installed and hosted on **your own Unix/Linux server**.\n\n\u003cimg src=\"gitprep_01.png\" width=\"870\" border=\"1\"\u003e\n\n\n## GitPrep example\n\nThere is a demo setup at **[GitPrep example](https://perlcodesample.sakura.ne.jp/gitprep/gitprep.cgi/kimoto/gitprep)**.\nYou will find that GitPrep is a really portable GitHub system and has many features such as repository, pull request, issue and wiki.\n\n## Features\n\n* Github clone: GitPrep has the same interface as GitHub.\n* Support issue system\n* Portable: You can install GitPrep on your own Unix/Linux server.\n* Only needs Perl 5.10.1+.\n* Smart HTTP support: you can pull and push repository via HTTP.\n* Built-in web server, and reverse proxy support.\n* CGI support.\n* SSL support.\n* Public key authentication support\n\n**Installation** is very **easy**, requiring only two commands.\nThere are many other configuration settings that can be found in [gitprep.conf](gitprep.conf.example).\n\nSince the git repositories **directory** are accessible on the server, it becomes easy to fix mistakes like \"git push -f origin master\".\n\nAll repositories are safely stored only on **your server**.\n\nThis project is open sourced, **all free**.\n\nLet's try GitPrep. If you like GitPrep, please share and talk about GitPrep in your community or your company.\n\n## A. Install and run GitPrep by embedded web server\n\nGitPrep has its own web server. You can start GitPrep easily.\n\n### Create gitprep user\n\nCreate a **gitprep** user. This is not necessary, but recommended:\n\n    useradd gitprep\n    su - gitprep\n    cd ~\n\n### Check if git is installed\n\n    git --version\n\n### Check Perl Version\n\nCheck Perl version. You can use GitPrep if the Perl version is 5.10.1+;\n\n    perl -v\n\nIf you don't have Perl 5.10.1+, you need to install a newer perl version with perlbrew.\n\n    curl -L http://install.perlbrew.pl | bash\n    echo \"source ~/perl5/perlbrew/etc/bashrc\" \u003e\u003e ~/.bash_profile\n    source ~/.bash_profile\n    \n    perlbrew install perl-5.16.3\n    perlbrew switch perl-5.16.3\n    perl -v\n    \n### Download, setup and update - Simplified\n```BASH\n# Pulls a shallow copy from this repository\ngit clone --depth=1 https://github.com/yuki-kimoto/gitprep\ncd gitprep\n\n# This will install the necessary modules, create the config file and data folder\n./setup\n\n# To update in future, run\n./update\n```\n[Start gitprep server](#start-gitprep-server)\n\n### Download and setup - Detailed\nDownload from the repository and change directory:\n\n    git clone --depth=1 https://github.com/yuki-kimoto/gitprep\n    cd gitprep\n\nSetup. Needed modules are installed.\n\n    ./setup_module\n\nIf this fails and extlib directory already exists, try to remove \"extlib\" and run \"./setup_module\" again.\n\n    rm -rf extlib\n    ./setup_module\n\nCheck if module setup successes. Run the following command.\n\n    prove t\n\nIf \"syntax OK\" is displayed, setup was successful. \n\nSetup database.\n\n    ./setup_database\n\nIf you used GitPrep version 1 and upgrade it to version 2, you need to upgrade database\nwith the following command\n\n    # Backup gitprep directory for safety\n    cd ..\n    cp -rp gitprep gitprep.bak\n    \n    # Upgrade database\n    cd gitprep\n    mv data/gitprep.db data/gitprep_v1bak.db\n    ./setup_database\n    old/copy_database_v1_to_v2 data/gitprep_v1bak.db data/gitprep.db\n\nIf you install git in your local directory,\nyou have to add the correct git command path to the **gitprep.conf** config file.\n\n    [basic]\n    ;;; Git command path\n    git_bin=/home/yourname/local/bin/git\n\nAnd do some settings\n\n    git config --global core.quotepath false\n\n### Start gitprep server\n\nYou can start the application by running the provided gitprep script.\nThe application is run in the background and the port is **10020** by default.\n\n    ./gitprep\n\n(If you run this command again, gitprep server restarts.)\n\nThen access the following URL.\n\n    http://localhost:10020\n\nIf you want to change the port, edit gitprep.conf.\nIf you cannot access this port, you might change the firewall settings.\n\n### Stop gitprep server\n\nYou can stop the application by adding the **--stop** option.\n\n    ./gitprep --stop\n\n## B. Run GitPrep as CGI script\n\nYou can run GitPrep as CGI script as the following site.\n\n[GitPrep example site](https://perlcodesample.sakura.ne.jp/gitprep/gitprep.cgi/kimoto/gitprep)\n\nThis is shared server. I assume you can connect the server via SSH and login with your own user.\n\nInstallation process is same as above except for create user.\n\nIf you finish installation, you can access the following URL.\n\n    http://yourhost/somepath/gitprep/gitprep.cgi\n\n### If you see Internal Server Error\n\nIf you see an internal server error, look at the log file (gitprep/log/production.log)\nto see what problem has occurred.\n\n## FAQ\n\n## I can't install GitPrep on CentOS\n\nAfter CentOS 6, some perl core modules are not installed by default.\nYou can install Perl core modules by the following command.\n\n    yum -y install perl-core\n\n## Can't find git command from GitPrep\n\nIf you install git into your local directory,\nyou must add the correct git command path to the config file **gitprep.conf** .\n\n    [basic]\n    ;;; Git command path\n    git_bin=/home/yourname/local/bin/git\n\n### blame doesn't work\n\nIn GitPrep, blame page uses \"git blame --line-porcelain\". In old git, there is no --line-porcelain option.\nWe don't know when --line-porcelain was added to git.\nAt least, blame page work well in git 1.8.2.1.\n\n### How to upgrade GitPrep\n\nIt is very easy. you only overwrite all files except for \"gitprep.conf\".\n\nIf you want to upgrade by \"git pull\", you can do it.\nyou create \"gitprep.my.conf\" copied from \"gitprep.conf\",\nand do \"git pull\"\n\nIf you get a drinking elephant error after upgrading, you might be missing\na new CPAN dependency. Run again \"setup.sh\".\n\n### I can't push large repository by http protocol\n\nThere are some reasons.\n\n**1. Git version is old**\n\nIf you see \"error: RPC failed; result=56, HTTP code = 200\" , your git maybe old.\nPlease upgrade to latest git. I checked git version 1.8.5.5.\n\n**2. GitPrep restriction**\n\nGitPrep restrict max post message size 10MB (This is default of Mojolicious)\n\nYou maybe see the following error\n\n    Delta compression using up to 4 threads.\n    Compressing objects: 100% (17830/17830), done.\n    Writing objects: 100% (18281/18281), 687.05 MiB | 129.92 MiB/s, done.\n    Total 18281 (delta 295), reused 18281 (delta 295)\n    error: RPC failed; result=22, HTTP code = 413\n    fatal: The remote end hung up unexpectedly\n    fatal: The remote end hung up unexpectedly\n\nPlease increase the value of MOJO_MAX_MESSAGE_SIZE\n    \n    # 1GB\n    export MOJO_MAX_MESSAGE_SIZE=1024000000\n\n**3. git restriction**\n\ngit restrict post max size via http protocol.\nhttp.postBuffer value of git config is maybe small.\n\nYou maybe see the following error message.\n\n    error: RPC failed; result=56, HTTP code = 200\n    fatal: The remote end hung up unexpectedly\n    Counting objects: 18281, done.\n    Delta compression using up to 4 threads.\n    Compressing objects: 100% (17830/17830), done.\n    Writing objects: 100% (18281/18281), 687.05 MiB | 133.23 MiB/s, done.\n    Total 18281 (delta 295), reused 18281 (delta 295)\n    fatal: The remote end hung up unexpectedly\n    Everything up-to-date\n\nPlease increase the value of http.postBuffer.\n    \n    # 1GB\n    git config http.postBuffer 1024000000\n\n### How to use reverse proxy?\n\nYou can use GitPrep via reverse proxy access\n\n         ----------------------------     ------------\n    ----\u003e| Web Server(Reverse proxy)|----\u003e|GitPrep   |\n    \u003c----| (Apache, etc)            |\u003c----|          |\n         ----------------------------     ------------\n\nI show apache config example.\nYou can use Name virtual host.\n    \n    # HTTP\n    \u003cVirtualHost *:80\u003e\n\n      ServerName myhost.com\n      \u003cProxy *\u003e\n        Order deny,allow\n        Allow from all\n      \u003c/Proxy\u003e\n      \n      ProxyRequests Off\n      ProxyPreserveHost On\n      ProxyPass / http://localhost:10020/ keepalive=On\n      ProxyPassReverse / http://localhost:10020/\n      RequestHeader set X-Forwarded-Proto \"http\"\n        \n    \u003c/VirtualHost\u003e\n\nIf you use GitPrep via https, you should set X-Forwarded-HTTPS Request Header.\n\n    # HTTPS\n    \u003cVirtualHost *:443\u003e\n\n      ServerName myhost.com\n      \u003cProxy *\u003e\n        Order deny,allow\n        Allow from all\n      \u003c/Proxy\u003e\n      \n      ProxyRequests Off\n      ProxyPreserveHost On\n      ProxyPass / http://localhost:10020/ keepalive=On\n      ProxyPassReverse / http://localhost:10020/\n      RequestHeader set X-Forwarded-Proto \"https\"\n    \u003c/VirtualHost\u003e\n\n### How to use reverse proxy with sub directory?\n\nGitPrep supports reverse proxy with sub directory.\n\nHere is the apache configuration example:\n\n    \u003cVirtualHost *:80\u003e\n      ServerName perlcodesample.com\n      ProxyRequests Off\n\n      RedirectMatch ^/gitprep$ /gitprep/\n\n      \u003cLocation /gitprep/\u003e\n        Require all granted\n        ProxyPass http://localhost:10020/ keepalive=On\n        RequestHeader setifempty X-Forwarded-Proto \"https\" \\\n                                        expr=%{REQUEST_SCHEME}=='https'\n        RequestHeader setifempty X-Forwarded-Proto \"http\"  \\\n                                        expr=%{REQUEST_SCHEME}!='https'\n        RequestHeader setifempty X-Request-Base \"/gitprep/\"\n        ProxyPreserveHost On\n      \u003c/Location\u003e\n    \u003c/VirtualHost\u003e\n\n### How to import already existing repositories?\n\nYou can import already existing repositories by **script/import_rep** script.\n\n    cd script\n    ./import_rep -u kimoto rep_dir\n\n**-u** is user name. rep_dir must contains git repositories like the following.\n\n    rep_dir/project1.git\n           /project2.git\n           /project3.git\n           /project3.git\n\nIf **description** file exists in git repository, it is copied.\n\n### I can't add more than one collaborator\n\nThis is a GitPrep bug before version 1.5.1.\nPlease use after version 1.5.2.\n\nIf you continue to use GitPrep before version 1.5.1,\ncollaboration table is broken.\nPlease fix it the following way.\n\n    # Run SQLite client\n    sqlite3 data/gitprep.db\n    \n    # drop collaboration table\n    drop table collaboration;\n    \n    # Restart\n    ./gitprep\n\n### Encoding errors occur when using Windows git client over HTTP\n\nThis seems related to HTTP/2 use: forcing HTTP/1.1 should resolve the problem.\n\nOn the Windows client, execute the command:\n\n    git config --global http.version HTTP/1.1\n\n### I want to set time zone.\n\nGitPrep is timezone-agnostic. It delegates time zone handling to the browser.\nIf you want to change the time zone, do it on your client system.\n\n### How to hide user home directory in ssh repository URL?\n\n**1. Use symbolic link and ssh_rep_url_base option**\n\nAt first, set [basic]ssh_rep_url_base option to /~/git\n\n    ;;; SSH repository url base\n    ; For exampke, If you set this value to /~/git, SSH repository url become\n    ; ssh://gitprep@59.106.185.196/~/git/kimoto/gitprep.git\n    ; ~ is exapned to user home directory automatically\n    ssh_rep_url_base=/~/git\n\nNext, you create symbolic link to /home/gitprep/gitprep/data/rep\n    \n    cd ~\n    ln -s ~/gitprep/data/rep ~/git\n\n**2. Use only public key authentication and set [basic]ssh_rep_url_base to empty**\n\nIf you use only public key authentication, you can access ssh repository\nusing the following url.\n\n    ssh://kimoto@59.106.185.196/kimoto/gitprep.git\n\nIf you set [basic]ssh_rep_url_base to empty string, this URL is shown on Browser.\n\n    ;;; SSH repository url base\n    ; For exampke, If you set this value to /git, SSH repository url become\n    ; ssh://kimoto@59.106.185.196/git/kimoto/gitprep.git\n    ssh_rep_url_base=\n\n### How to get atom feed of commits page\n\nYou can get atom feed of commits page by the following URL\n\n    http://somehost.com/kimoto/gitprep/commits/master.atom\n\n### How to run GitPrep from root user\n\nYou can manage the application from the root user.\n\nStart the application\n\n    sudo -u gitprep /home/gitprep/gitprep/gitprep\n\nStop the application\n\n    sudo -u gitprep /home/gitprep/gitprep/gitprep --stop\n\nIf you want to start the application when the OS starts,\nadd the start application command to **rc.local**(Linux).\n\nIf you want to make it easy to manage gitprep,\nthen create a run script.\n\n    mkdir -p /webapp\n    echo '#!/bin/sh' \u003e /webapp/gitprep\n    echo 'su - gitprep -c \"/home/gitprep/gitprep/gitprep $*\"' \u003e\u003e /webapp/gitprep\n    chmod 755 /webapp/gitprep\n\nYou can start and stop the application with the following command.\n\n    # Start or Restart\n    /webapp/gitprep\n\n    # Stop\n    /webapp/gitprep --stop\n\n### I want to use GitPrep on Perl 5.8.7 system\n\nGitPrep 2.0 dropped support for Perl 5.8.7 because latest Mojolicious doesn't support Perl 5.8.\n\nYou can choose between those options:\n\n**1. use GitPrep 1.xx**\n\nGitPrep 1.xx support Perl 5.8.7+. You can use GitPrep v1.12.\n\nhttps://github.com/yuki-kimoto/gitprep/archive/v1.12.tar.gz\n\nYou can see version 1.12 document.\n\n[GitPrep version 1 Document](old/README_v1.md)\n\n**2. You can install your local perl by perlbrew.**\n\nhttp://perlbrew.pl/\n\nperlbrew is a very useful perl installation tool without breaking your system perl.\n\nIf you install perl 5.10.1+ with perlbrew, you can install latest GitPrep.\n\n### I know information about GitPrep 2.0 upgrading.\n\nIf you use GitPrep on Perl 5.8 and install newer perl with perlbrew,\nyou must remove extlib directory before running the \"./setup_module\" command.\n\n  rm -rf extlib\n\nYou should know the following small changes.\n\n**1. X-Forwarded-HTTPS header is deprecated. use  X-Forwarded-Proto header.**\n    \n    # This is deprecated in GitPrep 2.0\n    RequestHeader set X-Forwarded-HTTPS \"1\"\n    \n    # Use X-Forwarded-Proto instead\n    RequestHeader set X-Forwarded-Proto \"https\"\n\n**2. remove [basic]show_ignore_space_change_link option**\n\nremove [basic]show_ignore_space_change_link option.\nand move this feature to project settings page.\n\n    # Go to settings page in your project\n    /kimoto/gitprep/settings\n\n**3. remove [basic]show_ignore_space_change_link option**\n\nremove [basic]show_ignore_space_change_link option.\nbut enable this feature on in project settings page.\n\n    # Go to settings page in your project\n    /kimoto/gitprep/settings\n\n**4. remove [basic]encoding_suspects option**\n\nremove [basic]encoding_suspects option\nand move this feature to project settings page.\n\n    # Go to settings page in your project\n    /kimoto/gitprep/settings\n\n**5. mail is required for user registration.\n\nmail address is require for user registration.\n\n### Pull requests is removed when GitPrep upgrade\n\nSorry, I found critical database specification mistake in GitPrep from v2.0 to v2.2,\nand fix it in v2.3.\nAll your pull requests is removed when upgrading from v2.0-v2.2 to v2.3+.\nPlease create Pull request again by the following command.\n    \n    old/fix_v2_pull_request data/gitprep.db\n\n### Are there other ways to install GitPrep?\n\n**Sparrowdo**\n\nYou can use Sparrowdo to install GitPrep on remote server ( by ssh ) or on running Docker container:\n\nHere is example for Docker minimal Debian image:\n\n    $ zef install Sparrowdo\n\n    $ docker pull bitnami/minideb-extras \n    $ docker run --name instance0 -d bitnami/minideb-extras -expose=10020:10020  bash\n\n    $ sparrowdo \\\n      --bootstrap\n      --docker=instance1 \\\n      --no_sudo --sparrowfile=deploy/sparrowfile.install.pl6 \\\n      --format=production\n\n    $ firefox 127.0.0.1:10020\n\nAnd for remote server:\n\n    $ sparrowdo \\\n      --bootstrap\n      --host=$ipaddress \\\n      --no_sudo --sparrowfile=deploy/sparrowfile.install.pl6 \\\n      --format=production\n\n    $ firefox $ipaddress:10020\n\nCaveat - this installation method is only supported for Linux OS.\n\nFollow [Sparrowdo](https://github.com/melezhik/sparrowdo) for the details.\n\n**Dockerfile and docker-compose**\n\nYou can use Docker to build your own container based on Alpine Linux. This image configures SSHD to be run by user root and GitPrep to be run by user gitprep.\n\n    docker build ./deploy -t yuki-kimoto/gitprep:latest\n\nWith that build, you can start a service with docker-compose:\n\n    version: \"3\"\n\n    services:\n    gitprep:\n        image: yuki-kimoto/gitprep:latest\n        container_name: gitprep\n        hostname: gitprep\n        restart: always\n        ports:\n        - \"10020:10020\"\n        - \"0.0.0.0:2222:22\"\n        volumes:\n        - gitprep:/home/gitprep\n        - sshd:/etc/ssh\n\n    volumes:\n    gitprep:\n    sshd:\n\n## For Developers\n\n### Run GitPrep in development mode\n\nIf you are a developer, you can start the application in development mode.\n\n    ./morbo\n\nThen access the following URL.\n\n    http://localhost:3000\n\nIf you have git, it is easy to install from git.\n\n    git clone git://github.com/yuki-kimoto/gitprep.git\n\nIt is useful to write configuration in ***gitprep.my.conf***, not gitprep.conf.\n\n## The way to create installable Mojolicious application\n\nGitPrep is the best example for developers who want to create installabel Mojolicious application.\n\nEven if shared hosting server, you can install Mojolicious application as CGI.\n\n###1. cpanm and cpanfile, module installation and version control###\n\n[Tatsuhiko Miyagawa](http://weblog.bulknews.net/)'s cpanm and cpanfile is the tool which install CPAN module easily.\n\n**cpanm** is a command. It is **one file**. you can download cpanm easily and put it in your directory.\n\n**cpanfile** is **a definition** of module name and version. you create the following file which name is \"cpanfile\".\n\n    requires 'Time::HiRes', '== 1.9732';\n    requires 'DBD::SQLite', '== 1.50';\n    requires 'DBI', '== 1.634';\n    requires 'DBIx::Connector', '== 0.53';\n    requires 'Object::Simple', '== 3.14';\n    requires 'DBIx::Custom', '== 0.36';\n    requires 'Validator::Custom', '== 1.01';\n    requires 'Config::Tiny', '== 2.23';\n    requires 'Mojolicious', '== 6.57';\n    requires 'Mojolicious::Plugin::BasicAuth', '== 0.08';\n    requires 'Mojolicious::Plugin::AutoRoute', '== 0.19';\n    requires 'Mojolicious::Plugin::INIConfig', '== 0.03';\n    requires 'Mojolicious::Plugin::DBViewer', '== 0.28';\n    requires 'Mojolicious::Plugin::RequestBase', '== 0.3';\n    requires 'Text::Markdown::Hoedown', '== 1.01';\n    requires 'Time::Moment', '== 0.38';\n    requires 'MIME::Entity', '== 5.510';\n    requires 'HTML::FormatText::WithLinks', '== 0.15';\n    requires 'Email::Sender', '== 2.600';\n    requires 'HTML::Restrict', '== 3.0.0';\n    requires 'Imager', '== 1.025';\n\nIf you want to install all defined modules, you only run the following command.\n\n    perl -Iextlib/lib/perl5 cpanm -L extlib --installdeps .\n\nIt's ok. but in some environment Module::CoreList is not installed, and latest ExtUtils::MakeMaker is needed for module installation.\n\nI write the following way in \"setup_module\"\n\n    perl cpanm -n -l extlib Module::CoreList\n    perl -Iextlib/lib/perl5 cpanm -f -L extlib ExtUtils::MakeMaker\n    perl -Iextlib/lib/perl5 cpanm -L extlib --installdeps .\n\n###2. CGI is supported in Mojolicious\n\nIt is good luck for us that Mojolicious author [Sebastian Riedel](https://x.com/kraih) decided to **support CGI** in Mojolicious.\n\nWe can create web application which support CGI with a little effort.\n\nAll you do is always using **url_for** method or **url_with** method in your templates when you write URL.\n\n    \u003ca href=\"\u003c%= url_for('/foo') %\u003e\"\u003eBar\u003c/a\u003e\n    \n    \u003ca href=\"\u003c%= url_with('/foo') %\u003e\"\u003eBar\u003c/a\u003e\n\nMojolicious automatically resolve URL for both embded server and CGI.\n\nAfter that, you only prepare CGI script to call Mojolicious application in **production** mode.\n\n    #!/usr/bin/env perl\n    use FindBin;\n    use lib \"$FindBin::Bin/extlib/lib/perl5\";\n\n    $ENV{MOJO_MODE} = 'production';\n    require \"$FindBin::Bin/script/gitprep\";\n\n## Module dependencies\n\nGitPrep depends on the following modules, especially Mojolicious is the base of GitPrep.\nThanks to Mojolicious author, [Sebastian riedel](https://x.com/kraih).\n\n* [Mojolicious](http://search.cpan.org/~sri/Mojolicious/lib/Mojolicious.pm)\n* [Mojolicious::Plugin::INIConfig](http://search.cpan.org/dist/Mojolicious-Plugin-INIConfig/lib/Mojolicious/Plugin/INIConfig.pm)\n* [Mojolicious::Plugin::AutoRoute](http://search.cpan.org/dist/Mojolicious-Plugin-AutoRoute/lib/Mojolicious/Plugin/AutoRoute.pm)\n* [Mojolicious::Plugin::BasicAuth](http://search.cpan.org/dist/Mojolicious-Plugin-BasicAuth/README.pod)\n* [Mojolicious::Plugin::DBViewer](http://search.cpan.org/dist/Mojolicious-Plugin-DBViewer/lib/Mojolicious/Plugin/DBViewer.pm)\n* [Mojolicious::Plugin::RequestBase](http://search.cpan.org/dist/Mojolicious-Plugin-RequestBase/lib/Mojolicious/Plugin/RequestBase.pm)\n* [Object::Simple](http://search.cpan.org/dist/Object-Simple/lib/Object/Simple.pm)\n* [Text::Markdown::Hoedown](http://search.cpan.org/~tokuhirom/Text-Markdown-Hoedown-1.01/lib/Text/Markdown/Hoedown.pm)\n* [Validator::Custom](http://search.cpan.org/dist/Validator-Custom/lib/Validator/Custom.pm)\n* [Time::Moment](http://search.cpan.org/dist/Time-Moment/lib/Time/Moment.pod)\n* [Config::Tiny](http://search.cpan.org/dist/Config-Tiny/lib/Config/Tiny.pm)\n* [DBD::SQLite](http://search.cpan.org/dist/DBD-SQLite/lib/DBD/SQLite.pm)\n* [DBI](http://search.cpan.org/dist/DBI/DBI.pm)\n* [DBIx::Connector](http://search.cpan.org/dist/DBIx-Connector/lib/DBIx/Connector.pm)\n* [DBIx::Custom](http://search.cpan.org/dist/DBIx-Custom/lib/DBIx/Custom.pm)\n* [HTML::FormatText::WithLinks](https://metacpan.org/pod/HTML::FormatText::WithLinks)\n* [MIME::Entity](https://metacpan.org/pod/MIME::Entity)\n* [Email::Sender](https://metacpan.org/pod/Email::Sender)\n* [HTML::Restrict](https://metacpan.org/pod/HTML::Restrict)\n* [Imager](https://metacpan.org/pod/Imager)\n\n## Sister project\n\nThese are my Perl web application projects.\n\n* [WebDBViewer](https://github.com/yuki-kimoto/webdbviewer) - Database viewer to see database information on web browser.\n\n## Bugs\n\nIf you find some bug, please report it as a GitHub issue. Small bugs are OK! I'm pleased if you report anything buggy.\n\n* [Github Issue](https://github.com/yuki-kimoto/gitprep/issues?state=open)\n\n## Author\n\nYuki Kimoto\n\n[Yuki Kimoto Perl Blog](http://blogs.perl.org/users/yuki_kimoto/)\n\n[Yuki Kimoto X](https://x.com/yukikimoto2)\n\nIf you are interested in my projects and activity, Please follow me on X.\n\n## Contributors\n\nThanks for helping my GitPrep project.\n\n* [monnerat](https://github.com/monnerat)\n* [bilogic](https://github.com/bilogic)\n* [maspalio](https://github.com/maspalio)\n* [djzort](https://github.com/djzort)\n* [SvenDowideit](https://github.com/SvenDowideit)\n* [melezhik](https://github.com/melezhik)\n* [spatil47](https://github.com/spatil47)\n* [reneeb](https://github.com/reneeb)\n* [tetsuh](https://github.com/tetsuh)\n* [flixh](https://github.com/flixh)\n* [kopytov](https://github.com/kopytov)\n* [kberov](https://github.com/kberov)\n* [deavmi](https://github.com/deavmi)\n* [jackivan88](https://github.com/jackivan88)\n* [mrmuskrat](https://github.com/mrmuskrat)\n* [knittl](https://github.com/knittl)\n* [programmerMOT](https://github.com/programmerMOT)\n* [sn0](https://github.com/sn0)\n* [socialmedialabs](https://github.com/socialmedialabs)\n* [troneill](https://github.com/troneill)\n* [brainchild0](https://github.com/brainchild0)\n* [emil-perhinschi](https://github.com/emil-perhinschi)\n\n\n## Copyright \u0026 license\n\nCopyright 2012-2024 Yuki Kimoto. All rights reserved.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of either:\n\na. the GNU General Public License as published by the Free Software Foundation;\neither version 1, or (at your option) any later version, or\n\nb. the \"Artistic License\" which comes with this Kit.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\nFITNESS FOR A PARTICULAR PURPOSE. See either the GNU General Public License or\nthe Artistic License for more details.\n\nYou should have received a copy of the Artistic License with this Kit, in the\nfile named \"Artistic\". It can also be found at\n[https://dev.perl.org/licenses/artistic.html](https://dev.perl.org/licenses/artistic.html).\n\nYou should also have received a copy of the GNU General Public License along\nwith this program in the file named \"Copying\". If not, write to the Free\nSoftware Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\nMA 02110-1301, USA or visit their web page on the internet at\n[https://www.gnu.org/copyleft/gpl.html](https://www.gnu.org/copyleft/gpl.html).\n\nBundled vectorial icons (octicons) are covered by the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuki-kimoto%2Fgitprep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuki-kimoto%2Fgitprep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuki-kimoto%2Fgitprep/lists"}