13

I'm using git for the purposes of making a historical transcript of the changes made to my project. I understand it's not the ideal usage but it's the usage pattern I've chosen for various reasons which I won't get into for the sake of brevity.

How would I create a cron job that would commit the changes to the repository each day or week?

I'm using the latest version of git on Ubuntu 10.10.

studiohack
  • 13,468
  • 19
  • 88
  • 118
Jason
  • 1,869
  • 7
  • 31
  • 40

2 Answers2

11
0 20 * * 0 /path_to_script

That will run the command specified (replace /path_to_script') at 20:00 local time every Sunday. The syntax for cron jobs is fairly simple, and there's a slick tool that will help you create them without remembering the code positions.

In this case, the command should be a script that runs the commit for you. I think it would be easiest in your case to write a quick shell script to change to the clone directory and then run the commit. Create a file at ~/commit.sh and put this in it (replacing /location/of/clone, of course)


#!/bin/sh
cd /location/of/clone
git-commit -m "commit message, to avoid being prompted interactively"

Then chmod +x ~/commit.sh to make it executable, and have the cron job run that (referring to it by it's full path, rather than using ~).

jcrawfordor
  • 16,219
  • 5
  • 39
  • 51
  • Good answer. Keep in mind that the cronjob (obviously) only gets executed if your computer is running at the specified time (e.g. Sunday 20:00). – pableu Mar 31 '11 at 07:35
  • how can i make it do the push to the server as well? – Jason Apr 04 '11 at 23:53
  • Also, how do i make it add files that i've added – Jason Apr 04 '11 at 23:56
  • Just add git-push to the script to have it push to the server as well. You can use the -a option to git-commit to have it automatically add all files that have been modified or deleted. – jcrawfordor Apr 05 '11 at 22:29
  • 1
    Don't you want to add a `-a` to the commit command, so it will add automatically all the files that are already tracked to the staging area? – Dror Jan 02 '13 at 08:46
  • Yeah, this won't do anything without the `-a`. In addition it won't even do the commit because it is `git-commit`. I am going to fix it. – Elijah Lynn Jun 28 '15 at 16:29
5

Run crontab -e to edit your user cronjob, and insert this line:

0 20 * * 0 (cd /path/to/myproject && git add . && git commit -m "Automatic Commit" && git push)

Of course you will have to setup your GIT repo including a working remote repository, but that's not in scope of this question.

speakman
  • 271
  • 2
  • 4