diff --git a/bin/git-proxy b/bin/git-proxy new file mode 100755 index 0000000..7d9579e --- /dev/null +++ b/bin/git-proxy @@ -0,0 +1,84 @@ +#! /bin/bash + +# connect to the Git repository through a SOCKS proxy + + +# default setting is to use port 1080 on the local host +proxy="localhost:1080" +from="default" + +# check if there is a value in the git configuration +if git config --get socks.proxy >& /dev/null; then + proxy=`git config --get socks.proxy` + from="git's socks.proxy" +fi + +# check if a generic proxy has been defined in the environment +if [ -n "$ALL_PROXY" ]; then + proxy="$ALL_PROXY" + from="\$ALL_PROXY" +fi +if [ -n "$all_proxy" ]; then + proxy="$all_proxy" + from="\$all_proxy" +fi + +# check if a SOCKS proxy has been defined in the environment +if [ -n "$SOCKS_PROXY" ]; then + proxy="$SOCKS_PROXY" + from="\$SOCKS_PROXY" +fi +if [ -n "$socks_proxy" ]; then + proxy="$socks_proxy" + from="\$socks_proxy" +fi +if [ -n "$SOCKS5_PROXY" ]; then + proxy="$SOCKS5_PROXY" + from="\$SOCKS5_PROXY" +fi +if [ -n "$socks5_proxy" ]; then + proxy="$socks5_proxy" + from="\$socks5_proxy" +fi + +# check if a git specific SOCKS proxy has been defined in the environment +if [ -n "$GIT_SOCKS_PROXY" ]; then + proxy="$GIT_SOCKS_PROXY" + from="\$GIT_SOCKS_PROXY" +fi + +function usage() { +cat << @EOF +Usage: + `basename $0` HOST PORT + +Helper script to connect to a Git repository over the git:// protocol at host HOST and port PORT through a SOCKS proxy at $proxy ($from). + +To use the proxy for all git:// traffic, set the core.gitproxy option to "git-proxy": + + git config core.gitproxy "git-proxy" + + +To use the proxy only for some reporitories, use the syntax explained in git-config(1). + +To configure which proxy to use, set an appropriate environment variable (see below) or socks.proxy option to the proxy address, for example "localhost:1080": + + git config socks.proxy "localhost:1080" + + +The address of the proxy is read from (in order of priority): + - the GIT_SOCKS_PROXY environment variable; + - the SOCKS_PROXY or SOCKS5_PROXY environment variable; + - the ALL_PROXY environment variable (see curl(1)); + - the socks.proxy git option; + - the default value: localhost:1080 . +@EOF +} + +if [ -z "$1" ] || [ -z "$2" ] || [ -n "$3" ]; then + usage + exit 1 +fi + +# connect through the specifid proxy +nc -x "$proxy" "$1" "$2"