Hosting a Git Repository
March 4, 2017 by Chris Johnson. Filed under
Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 378
Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 379
Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 380
Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 381
Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 382
Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 383
Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 378
Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 379
Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 380
Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 381
Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 382
Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 383
Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 378
Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 379
Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 380
Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 381
Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 382
Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /var/www/twodee/blog/wp-includes/category.php on line 383
git, howto, public.
When I first started learning Git, I was unimpressed by the notion of distributed version control. I felt and still feel that a central server hosting a project is important for the projects I work on, and I think the popularity of GitHub, Bitbucket, and Gitlab confirms my belief.
With these great services around acting as central servers, I’ve not had to host my own Git project. Then I started tracking student grades in my course reposities. This is not the kind of information I can give to a third-party service like GitHub, so it was time to learn how to host my own project. I’ve jotted my notes down here.
On the central server, we create an empty project directory and initialize it as a bare repository:
mkdir myrepo.git
cd myrepo.git
git init --bare
A bare repository differs from a non-bare repository in that it doesn’t give you a working directory in which to make edits. Its sole purpose is to serve out files, not edit them. It’s my understanding that making the central repository bare eliminates confusion. If changes are pushed from a client up to a non-bare central repository (one with a working directory), the working directory and repository passively get out of sync. You haven’t actively pulled any changes, but they were silently pushed to you.
On the client, if we don’t already have a project directory, we can clone the bare repository:
git clone host:path/to/myrepo
Suppose we already have a project that we initialized as a Git repository:
cd project
git init
In this case, we don’t need to clone anything, but we do need to set the repository’s remote to be our bare repository:
git remote add origin host:path/to/myrepo