1

I am managing a website using git. One of the requirements for the git repository is that bare = true. It uses a post-receive hook to manage pushes from my local computer. The problem is that sometimes I would like to make changes to a WordPress directory on my website using the wp-admin view online. So then I would just ssh into the directory and run git --work-tree="BLAH" add . and git --work-tree="BLAH" commit -m "BLAH". Is there a way to set up an alias, like alias git="git --work-tree=\"BLAH\"" and have that work for all git commands?

theEpsilon
  • 1,800
  • 17
  • 30
  • 1
    aliases are only suitable for static values and actions, i.e. `alias workDir='cd $workDir'` . When you want to process arguments you need to use functions. Search here for `[bash] function` and you'll find 100's of examples. Good luck. – shellter Oct 07 '16 at 03:11
  • 1
    To be honest the best way not to screw up deployment is to automatise it, Takes a look at Capistrano for example. – Antzi Oct 07 '16 at 03:16

3 Answers3

2

There are times when alias are a great tool. Then there are times when things start getting too complicated where a shell script is better.

To create a single command that executes other commands just create a file (maybe call it git-add-all) then type the following:

#! /bin/bash

git --work-tree="BLAH" add .
git --work-tree="BLAH" commit -m "BLAH"

Then you can run the script by simply doing:

bash git-add-all

Even better, make the script executable:

chmod +x git-add-all

Then you can use it like any command:

./git-add-all

Advanced tips:

To be able to run the script from any git directory you can copy/move the file to one of the directories in your $PATH. For example /usr/loca/bin. Then you can simply run git-add-all instead of ./git-add-all.

Even better is to create your own personal scripts directory and include it in $PATH. I personally use ~/bin. To add the directory to $PATH you just need to add the following to .bashrc or .profile:

export PATH=/home/username/bin:$PATH

or if you're doing this for the root user:

export PATH=/root/bin:$PATH
slebetman
  • 109,858
  • 19
  • 140
  • 171
1

In case anyone is curious how I solved it (thanks to shellter's comment), I wrote a bash script then prompted the user for input like so:

#!/bin/bash
function fix {
        git --work-tree="PATH_TO_WORKING_TREE" $1
}
echo -n "git "
read -e INPUT
until [ "$INPUT" = "quit" ]; do
        fix $INPUT
        echo -n "git "
        read -e INPUT
done

Running it:

user@server [repo.git] $ git-fix
git status
# On branch master
nothing to commit (working directory clean)
git quit
Community
  • 1
  • 1
theEpsilon
  • 1,800
  • 17
  • 30
0

There is a .bashrc file in Linux. You can edit it for creating alias for your favorite and frequently used commands.

To create an alias permanently add the alias to your .bashrc file

gedit ~/.bashrc

The alias should look like:

alias al='cmd'

You can read more about it over here.

Community
  • 1
  • 1
abhiarora
  • 9,743
  • 5
  • 32
  • 57
  • I know about .bashrc and already tried that. When I run `git` it expands it, but if the command has two parts (like `git status`) it won't expand it. – theEpsilon Oct 07 '16 at 03:09
  • try naming your alias other than `git`. For example, ll is an alias of `ls -alF`. It still works if you type `ll -h` or `ll -a`. – abhiarora Oct 07 '16 at 03:45