Put a project into git version control, with central svn style repository, + Drupal notes

Git is distributed and wonderful. Svn kinda sucks. But often you still want to sort of think of your git setup as having a one central bare repository, and git does that. Steps to set-up, for your reference and mine, follow:

Go to the base root directory of your project and type:

$ git init
$ git add .
$ git commit -m "initial commit"

now your project is under git’s purview.

$ git branch

and you see you have one branch named master that was auto-created by the git init and commit process above.

Now go to wherever you want the bare (central) repository to be.

$ mkdir my_repository.git
$ cd my_repository.git
$ git --bare init
Initialized empty Git repository in /home/git/my_repository.git
$ exit

your bare repository is set-up, simple as that, but now you need to push all the files into it:

First check and see if you have any remote repositories being tracked locally:

$ cd ~/Sites/myapp
$ git remote

None came up, good.

We already looked at local branches:

$ git branch
* master

Just one branch, the master branch that is auto-created by git when you did init/commit above.

Check .git/config:

$ cat .git/config
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true

Now, push from your project to the bare repository:

First, let your local know about the remote (bare):

$ git remote add origin ssh://myserver.com/home/git/my_repository.git

Check your config file again ($ cat .git/config) and you will see new lines for the remote named origin.


$ git push origin master

All set. Now you can have others pull from the bare main repository, e.g.:

$ git clone ssh://username@myserver.com/home/git/my_repository.git


in Drupal, you probably do not want settings.php and .htaccess included in the repository. Depending, you might also want to include sites/default/files as an ignore directory. Really, should of done this much earlier, before we added files into git. also, note: To stop tracking a file that is currently tracked, use git rm --cached filepathname.

To ignore files, like svn propset ignore, go edit the exclude file to add in the file paths with wildcards that you wish git to ignore:

$ vim .git/info/exclude


-bash-3.2$ cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Drupal Classified Ads Modules Options / Choices / Comparisons

This post discusses the options / choices for having classified ads on Drupal websites. So it is a comparison of classified ad solutions for Drupal, if you will. Drupal is an open source content management system for building websites and it has lots of contributed modules that can often solve your needs without any custom programming on your own part. And luckily, there are at least two contributed modules for classified ads, plus the more jack of all trades modern solution of using the CCK and Views modules to roll it together.

I want the ability for users to add and edit classified ads. There is a Classified Ads drupal module available, that allows just this functionality. The only problem is that it requires the ads to expire at some point, and then removes them from your site. I do not like this because I would rather have items marked “Sold” or “No Longer For Sale” instead of being deleted. Why? Because I want the content to stay forever, for SEO reasons. Webmasters developing content websites work so hard to get content, why give any of it up?

I do like however that it integrates a “My Classified Ads” tab into the user profile “My Account” pages, and that it handles email notifications to remind customers when their ads are going to expire. Very nice features.

Another alternative is just to create a new content type for ads (using CCK), and then create views to handle display. This does not give you a tab on the user profiles page, although they can view their ads from their “My account” page by clicking on the “Track” tab if you have enabled the Tracker module.

Another alternative is the drupal module Zipsads. This was overkill for me, I did not want to link ads to zip codes, as I wanted all ads to be worldwide.

There is one other classified ads Drupal module, called classifiQ but there is no published release for it. So oh well there.

I think my solution will be to create the ads using the CCK / Views option, and down the line when I get time figure out how to code in a custom tab in the user profile.

Well, but I like the idea of getting rid of old ads. But what about if people link to them? I do not want to lose the link juice. Maybe what is needed is a redirect solution for 404 errors in general, or else specifically for expired (and thus unpublished) ads… so that it redirects to the main classified ad page. Any ideas?