Files
hpr-knowledge-base/hpr_transcripts/hpr2446.txt

423 lines
38 KiB
Plaintext
Raw Normal View History

Episode: 2446
Title: HPR2446: Git server and git hooks
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2446/hpr2446.mp3
Transcribed: 2025-10-19 03:13:44
---
This is HPR Episode 2446 entitled Git Server and Git Hooks.
It is hosted by Klaatu and in about 41 minutes long and carrying a clean flag.
The summary is Klaatu talks about running Git on a server and explains Git Hooks.
This episode of HPR is brought to you by archive.org.
Support universal access to all knowledge by heading over to archive.org forward slash donate.
Hi everybody this is Ken from HPR with an important from Wednesday the 20th of December 2017.
The media in the HPR feeds will be served via redirect from archive.org.
If you run into any problems can you email admin at hackerpublicradio.org.
We've done quite a lot of testing and I'd like to thank everybody who helped out on that on the mailing list.
So nothing should change and nothing should be impacted.
All the URLs are going to remain this in the feeds.
It's just that for new shows and they will be downloaded via a 302 redirect to archive.org
and they'll be downloaded directly from there.
So we don't expect your problem but if there is contact us we great.
The reason behind this is that Josh at AnanasThost.com who has been providing our servers has been
receiving an unacceptable amount of traffic over the last period of
and that's resulted in slowdowns on the website and lots of issues.
So hopefully this move will take some of the burden off the website.
In addition to that if you can throw a few shekels in the direction of Josh we'd appreciate it.
If you go to any page on the HPR website there's a information there on how you help him.
So once again as of Wednesday the 20th of December 2017
the media for the HPR feeds will be served via redirect from archive.org.
Thank you very much for your time.
Hi everyone this is Clat 2 you're listening to Hacker Public Radio.
I'm going to talk about Git servers.
You can run your own Git server. You can use someone else's Git server.
There are lots of ways to make Git available to yourself or to others on a very massive scale.
So I want to talk about three three different options that you have.
I'm going to skim over the one and then I'm going to go into great detail about the other two.
So the one that I'm going to skim over is the maybe the obvious one to a lot of people.
It's this quote unquote social coding sites and and I'm going to just use social coding so that I don't
have to to keep naming different services that are out there that you might look into.
But the social coding sites are those big cloud-based Git hosts that kind of popularized
Git I think or maybe they responded to the popularity of Git. I don't know chicken egg either way
they're very popular and a lot of people use them and to a lot of people these social coding
sites literally are Git like that's that's what Git is and any other approach to Git is kind
of a weird hack or something that only the only people people only do to be contrary.
So it's it's a huge deal and so and that's kind of part of the benefit.
The social coding sites are out there they're pretty well known some more than others.
So you get a lot of eyes on your code in theory. I don't know how I feel about the success rate
of this for myself for instance there have been projects that I put on on Git lab or GitHub when
I really want to get a lot of eyes on something and they just kind of get overlooked but I'm going
to temper that with a little anecdote which is yesterday I was on GitHub for work and I typed my
name into the search box because I thought I was looking for repositories within my name space.
And it turns out that I was searching for my name across all of GitHub which I didn't even know
that was possible but I ended up doing that and when the when my name came up it it it showed me
like where my name was in in people's repositories. It was quite interesting actually and I again
I actually did not know that there was this functionality. It just never occurred to me but you
can totally scrape all the files and everyone's repositories on GitHub or at least the public ones
by just searching in a search box that I don't really know how I got there though so I can't
tell you where to find that search box but it exists and I typed my name into it and every time
that my name appeared in someone's repository in code in someone's repository or text fields in
someone's repository it came up and so one of the things that came up was something called CBR2
CbZ and I thought wow that's interesting I have a project called CBR2 CbZ but it's not on GitHub so
that can't be mine and it must not be related to mine oh wait my name is in it so I went to look at
this repository and it turns out that someone had somehow found a little stupid little script that I
had written a long time ago like two two years ago just because I had a bunch of dot CBR files,
comic book files, CBR files and I wanted to make them into CbZ files because CbZ files are the
things that my particular devices actually can read whereas none of my devices take dot CBR files
the difference as it happens is that dot CBR files are zipped up or whatever archived with the
RAR RAR archive tool which I think is kind of a windows thing but there is an unrar for Linux
and then the zed extension means that it has been zipped up so I had written this little script
to automate the process of translating CBR2 CbZ and I'd put it on GitLab just because I mean it was
a stupid script but I figured well maybe I'll need it someday and so I threw it up there and kind
of forgot about it as you do and so someone had found this stupid little script and they brought
it over into their GitHub account and uploaded it and kindly retained credit because I didn't
I did not demand credit the license was the WTF public license so you can pretty much do whatever
you want to with it and they retained my name which was nice and they improved the script because
apparently there had been an error for some stupid reason I had used seven zipped I don't know P7
zipped I don't remember why I did that I'm sure I had some reason but if maybe I couldn't find out
the syntax for zipped I hate zipped but anyway so I used L7 or P7 zipped or whatever and I guess
there had been an error in some in some cases so they they swapped it out for generic zipped which
turns out probably is better anyway and yeah it was really cool and I just saw this and it hadn't
just been one person it was like two different people because there was my name there was someone
else's name and then there was the third person's name whose whose repository it was so the thing had
passed through I don't know at least two but possibly possibly a total of three including me
uh people's hands so at least one it possibly two people's hands and had just ended up you know
out there in the world and I never knew about it until I accidentally stumbled across it because
they kindly gave me credit so that was really cool and kind of I mean that was not a project that I
ever thought oh I need a lot of eyes on this I hope that I can build a community around and I don't
know if two people or one people counts as a community but it was still a neat thing to see so
anecdotally I'm saying if you put your code on a social coding site the chances are let's say
better than if you put your code on your own privately hosted Git server or if you don't put it
on a server at all for anyone to see at all so there are lots of coding sites out there I'm going
to recommend to to you one is Git Lab Git Lab seems to be pretty popular not as ubiquitous as
GitHub which if you're looking for a lot of eyes just indiscriminately I want a lot of people to see
this then probably GitHub is the way to go because that's kind of got I mean it's it's where all
the people are whether they like it or not if you're in technology today you're probably on GitHub
or I mean the site of technology that involves looking at code and stuff so that's that's GitHub
there's Git Lab the Git Lab advantage for me is that it's an open stack meaning that you can
download the community the community edition of Git Lab you can throw it on a big server somewhere
and run an organization off of it I have worked at a place that has done this and it does provide
the same kind of pretty web interface that people kind of have become used to because of the
social coding sites but the advantage is that it's all internal now I don't really see why you
would do that if your point if your if your goal is to get your code in front of a lot of eyes you
might as well just go online and put your stuff on the social coding sites so there's GitHub Git Lab
and then I'm going to recommend also not a bug.org so if you're not really concerned about putting your
code in front of a lot of eyes necessarily but you want a place that does all the configuration and
background work for you then not a bug.org is kind of a good place to go because it's a completely
open stack like everything's there's no community no community edition versus enterprise edition
anything like that it's it's just completely free it's it's pretty cool it's not a bug.org
and it's free and open Git repository hosting whether it's or not whether or not it's going to last
forever I don't know whether or not anything's going to last forever I don't know come to think of it
but I'm saying that very very specifically because my old host Gatorius.org I guess it must have
been uh win under at one point they they disappeared and they were hosting huge projects I'm talking
about cute and I think KDE and you know big big projects like that so it was huge and it was a
full free stack and that's kind of what drove me over to Git Lab eventually because they closed up shop
so the important thing here is to remember that you can push to multiple repositories when you're
using Git I did I've done an episode on that here on hacker public radio go listen to episode number
2130 I think it is it's all about pushing to more than one remote server uh when you're using Git
and that way you can make all your changes and push your changes to multiple places you're sort
of doing your own remote backups all in one go it's really quite handy so in other words you can
have a an account on all three of these places and backup you know and send your your code to all three
of them and it'll always be the same code base you don't have to worry about diverging or or
keeping track of anything or keeping things in sync they just stay in sync all right so those
are all the advantages sort of the disadvantages well one of the disadvantages like I say is that
well they might go away you never know getorious.org I would have never said that was going to go away it
was huge and well it wasn't huge huge it wasn't GitHub huge but it was huge it was probably as big
as Git Lab I guess it was a great little site and completely free and had lots of open source
projects on it but it it died it went away so you don't own the platform you don't possess the
platform so it's always at risk of going away like everything in this world is so that's a disadvantage
the other big disadvantage for me that actually makes a difference like this is the real sort of like
oh this actually matters to me it like to my daily sort of workflow is hooks access to Git hooks
Git hooks are powerful little back-end scripts that you can create so that when you push
something to a Git repository it triggers some action it can be a many number of actions in fact
that's the kind of the big deal about it it can really actually literally be anything I mean you
could program a GitHub to I don't know shut down your computer whenever you push to a Git
repository called power off I don't know you can do whatever you want get hooks are extremely
powerful the problem is and I mean that's they're so powerful that the social coding sites out
there generally don't give you really full access to the raw power of Git hooks Git Lab I know
just from experience has something called something they call web hooks which are very very similar
I never did figure out the setup process behind it but I didn't really spend that much time
because when I found out that I couldn't do what I needed to do on a web hook versus a GitHub I
just stopped trying and I went and did my own Git host and did my GitHub my GitHub there so
if you need really powerful workflow integration with Git a social coding site is probably not
going to provide you that I mean again you could probably download Git Lab and install it and
and kind of manage your own thing and do web hooks and figure that out but I mean at that point
you kind of have to wonder why you are bothering I mean that's not the my the advantages to
social coding sites in my view is just that you get a lot of eyes your mileage may vary okay next up
is Git on a server that is using Git on a server it's just raw Git it's normal old Git so the
advantages here are well everything that was the disadvantage to social coding you own the whole
thing you're in control of every aspect of it the disadvantage to running Git on a server and
saying hey everybody here's my server here's Git is that doing it that way is that Git users are
your that your Git users are also your Unix users so it's it's a one-to-one relationship if you've
got someone on the outside who wants to access the Git repository like for pushing and pulling and
well not pulling but for pushing access and that sort of thing developer access then they have
to exist on your Unix as a user on your server which you may or may not want now you can restrict
them in a variety of ways by only letting them get into a Git shell that sort of thing but it's
still something that possibly is a work for you to figure out and then you have this problem well
now that they're a Unix user and they've got this Git they've got access to Git how then now
they've got access to all Git so all the Git on my server unless I come up with some special
scheme like I off the top of my head I guess you could somehow sort of give them a specific port
number that they can SSH into and then use SSH to sort of to route them into a certain
repository and in that directory there's just one Git repository but I mean that that just sounds
like you're sort of inventing a a back end forget when other back ends already exist for forget
hosting rather so it's it's not necessarily something that I personally would think that you
would want to go super wide multi user with it just it doesn't seem like that would be the way
to go so in other words the disadvantage to just running pure Git on a server and using that as
your Git server is that there's no allowance for access management okay and then the final one
that we'll talk about probably not in this episode is Gitolight GITO LITE it's a software package
called Gitolight that you can get from Gitolight.com and it gives you all of that access management
in a very interesting framework that we will talk about when I talk about Gitolight the
advantage here is that it's got access management for your Git users so your Git users don't have
to they don't have to have a one-to-one relationship with who you know the users that actually
exist on your server the disadvantage I guess is again there's no pretty web front end so I mean
that could be a disadvantage or an advantage for me it's an advantage but some people because
of the social coding sites and that's how a lot of people are sort of getting into Git now although
I would argue that if that is your user base like if your user base expects some kind of GUI
interface into your Git server I do think that such a thing exists it's just not going to be a web
GUI it's going to be something like sparkle share or something really simple like KDE dolphin
with the Git integration module turned on or something like Git cola which is a great little
desktop client for Git so there are lots of options it's just it may not be a website and if your
users are okay with actually using an application not embedded in a web browser you should be fine
but what I'm going to go over in this particular episode and the next one I'll do something
different but then this one I'm going to talk about the Git server so a server running Git
is what it really is and in the next episode I'll go over Gitolight and how to configure it and how
it works because it really is an interesting system and and better than what I'm going to talk
about right now arguably but I want to talk about this now because it is important to kind of
understand how Git is supposed to be run and how you know what you know what what it actually has
natively versus what other services like Gitolight or anything else add to it so to run Git
on a server you need a server which I am doing a series on server admin so hopefully you will be
able to set up a server if you haven't already and then you can continue with this and you really
don't need anything too fancy I mean especially if it's just you and maybe a couple of other people
or certainly just you it can be it can be a Raspberry Pi in your in your bedroom it doesn't matter
it can just be whatever server you can get whatever you can make into a server now the first thing well
okay so before we do anything the first thing I should say is that SSH and Git are very tightly
bound together it again Git doesn't require SSH and Git has an allowance for using the Git protocol
it has a Git protocol that you can use but typically I think people use it over SSH because that's
a more secure way to do it and everyone's got SSH turned on anyway so it's kind of that's kind
of the de facto standard and so I'm going to go with assuming that yeah you're using SSH as
you're as you're Git portal as it were so first thing that you want to do is create so if you don't
know sorry so if you don't know SSH that well then you'd want to learn SSH really well and you'd
want to learn it well enough so that you can do fancy things like managing SSH keys and managing
passwordless login that sort of thing you want to have that really really you want to solid
understanding of that like where do you put your public key when you want to authenticate to a server
or rather when you want to set up a server so that you can authenticate without a password where
does that public key go do you know do you know the exact file do you do you know all the different
ways that can get into that file if you don't you want to review this stuff because it's so
important for Git access for both just running Git on a server as we are now or once you or if
you decide to run something like get a light okay so first thing you need to do is create a Git
user you don't have to but you should so you just do an add user get user or user add and then
dash in get user whatever however you want to create that user it's up to you then you switch over
to that user and you want to create your initial dot ssh framework with appropriate permissions and
this is important because this is how this is how you are going to access Git on this server so you
just do an s u space dash space get user and then you can make your directory dot ssh and you can
traumatic the dot ssh directory to 700 you kind of have to do that because ssh will fail if the
permissions are not strict enough and then you can do a touch dot ssh slash authorized underscore keys
and you can tomod that well you must tomod that to 600 authorized key file it holds all the public
keys of developers that you're going to let use your Git repositories so if that developer is
just you then you need to put your public key in that file if it's other people then they
need to send you their public key so that you can put their public key into that file so this is
all pretty standard kind of ssh setup stuff the difference I guess is that usually when you're
setting up an ssh authorized keys file is probably just a collection of your keys of your personal
keys and this is different because you're giving a bunch of people permission to log in to this
server as some entity called Git user so once a developer sends you a key all you're going to want to
do is cat developer bob dot pub into redirect redirect into slash home slash Git user slash dot ssh
slash authorized underscore keys and now that the public key is in the authorized keys the developer
named bob I think I said will presumably have the private key on his machine and so he can ssh
into the server as Git user so Git user at example dot com and then with a dash i probably would be
the identity file he can point to his private key and that will get him in as Git user on that
server now you don't really want to give all the developers access to your entire server even as
Git user there's just no reason that they should have unbound access to your server so
what you really want to do is give them access to something called Git-shell this is a restricted
shell that ships with Git like the whole Git package and it is intended for use cases exactly
like this so if you grip Git-shell in slash Etsy slash shells if it is not there you should
probably add it so you can find out where it does exist on your system with which
Git-shell and you can even just kind of redirect that the the output of of of that into slash
Etsy slash shells as long as you do a redirect redirect you don't want to just do it once
and then you want to do a user mod and make sure that your Git user user uses the Git-shell
not for instance bash or tcsh or whatever your system may default to and the the command for
that would be user mod space dash s for shell space Git-shell and then space and then the name of
the user which in this case is Git user so now Git user can only use ssh to push and pull
Git repositories and Git user cannot access a login shell they can access a Git shell but they're
not actually you know they can't ssh and then poke around on your server they don't get an
interactive shell they get they get responses to and from Git and that's it and that's a good
thing you want that now what we'll also do is create a group called Git user and you can do that
with either what is it group add or you may find depending on the system that you're running this
on that group that that Git user group has already existed but that's what you want to create
as a Git user group and so you'll probably want to then add yourself for instance or whoever's
going to be administering this Git get install to the Git user group and you can do that with user
mod as well so user mod dash a I think for append and then dash capital G for primary group maybe
or no additional group and then Git user and then space clatu or whatever so now you've got a Git
well you've got to get infrastructure with an ssh backend and so far there's nothing
that anyone can interact with because there are no repositories on the server so for that you kind
of I mean you don't have to do it this way but this is the this is the the intended method of
doing a Git of a sort of a centralized Git repository and it's really not a Git it is but it's
not a Git repository it's a bare repository and that means that it has no working tree that is
no branch is ever in a checkout state and that's important because remote users aren't going to be
permitted or will not be permitted to push to an active branch I mean how would you like it if
you were working in a dev branch and suddenly someone pushed changes into your workspace that
would not be very good so you you make a bare repository that can have no active branch ever
and you won't ever collide into into little issues like that I mean I say little issues they're
actually huge issues they can bring your work to a grinding halt now you can put this bare
repository wherever you want you can put it in well you you should put it in either slash opt
or slash user slash local slash share some place like that you don't want to put it in a user's
home directory because the permissions there are pretty strict so in some kind of play in a location
that's kind of meant to be a commonly shared location is probably a better idea I have found
so you would want to do Git init dash dash bare space slash opt slash through dot git
and then you want to chown recursively chown dash capital R get user colon get user so that's
the user and the group slash opt slash food dot git and then I take it a little bit further into
a charade dash capital R 770 for slash opt slash food dot git and you can manage all that yourself
and how you know whatever scheme makes sense to you like I say you could put it in a home directory
I just don't like mucking around too much there because I figure there's a certain amount of
privilege that I want people to have in order to get into a home directory and there's a
difference a set of permission that I want people to be able to get into a Git repository so
and of course I mean the path is going to eventually be the thing that your developers look at
so probably the shorter the better I guess it's up to you but I mean you could you don't even
have to nest it in anything you can just put it at the root level if you want slash food dot git
there it's there so here's where it'll show up so if I do on my client machine now so now I'm
the developer I'm Bob I guess so Git space clone space Git user at example dot com colon
and then the path to the repository so if you if you've done slash food dot git then that's
colon slash food dot git if you put it in opt then it's colon slash opt slash food dot git
and so on it could be whatever now you can also I mean like I say if you do put it in Git
users home directory then it would just be colon tilde slash food dot git and that's kind of
that's kind of easy to to type that's kind of nice but it just depends on on your tolerance
level for for mucking around permissions and changing defaults and things like that now if you
do if you did that right now you would be warned that you've cloned an empty repository and
that's fine it's just telling you that we you've that a bare repository has been created and it's
empty and that's okay that's that's a that's a normal thing to happen before you've put anything
into a into a repository and this is it this you're you're done this is this is your your setup
you're you're now running Git on your server and you can do whatever you want to do because you
own that server your developers can push and pull as long as they have access to that server
through the Git user user and they get access by sending you their public key and then you put
that public key in the git users authorize keys file and suddenly they can log in to a git shell
and do all the git things that they need to do keep in mind that this does not allow random people
to pull from this git repository because you have not configured the only gateway into this
git repository right now as it stands is through SSH so if you want to allow HTTP pulling or
git protocol pulling then you've got to allow that traffic on your server understood good okay
so the really cool thing about all this that I might as well get into are the the the the the
git hooks that you can implement now because you've got full control over your environment now
git has a couple of unique variables that it deals with and and it's kind of it's the the
documentation here is not super great it's a little bit sparse to be honest but you could
you could figure it out yourself by by doing test git hooks or you can look at the examples
that get ships within in the dot git slash hooks directory whenever you create a git repository
it's it's there in every single one so there's for instance a pre-push stamp dot sample
git hook which obviously is not live but but you can make it live by I think if memory serves
removing the sample the extension just pre-push and the the advantage of these sample files really
is it's kind of the the value of reverse engineering without really having to delve too deeply into
into documentation that as again as far as I can tell they they don't really exit the the docs
just don't exist for this yet it's it's not something that's super well defined outside of
the source code I imagine so the one of them the pre-push dot sample one for for example
lists in a comment some of the things that you can that you can expect from from git when when
pushing so the so the there's a variable automatically assigned it's dollar sign one
positional variable I guess and that's that's the name of the remote that you're pushing to so
when when git receives a a pushed item it it assigns to the dollar to the dollar sign one variable
the name of the remote that you're pushing to so if you're pushing to origin
then that's that's where that's dollar sign one it's the name the proper name of it
if you are if you are pushing to if you're not pushing to a name you're just pushing straight
just directly to some URI then that's the dollar sign two variable or rather that dollar sign
two is always the URI of where you're pushing to but if if there is no name to the place that you
are pushing to then dollar sign one and dollar sign two end up being the same the information there's
some more information about a commit when when you're committing you you get that after the dollar
sign one and dollar sign two you get the local reference the local shawsome the remote reference
and the remote shawsome something like that not all the samples are quite that clear in the dot git
slash hook folder but they're an interesting read and you kind of get an idea for what what you can
do based on that and you can always also just write a really basic hook script and just echo
dollar sign one dollar sign two dollar sign three that sort of thing so that you see exactly what
git is aware of when it's receiving pushes from you it's important to note that git hooks are not
themselves version controlled so git is not when you do a git push of of your data your git hook
directory is not being pushed with everything else git hooks is just sort of the standard set of
git hooks of samples and the location of of scripts that you write but it does not being committed
so if you write a super fancy git hook you want to very much make sure that that git hook is
version controlled by your or tracked or backed up or whatever by you manually so you may just
want to put it into a you know a utles folder or something like that in that git repository I don't
know how you want to do it but you do have to do that yourself git does not does not back up the
git hook scripts that you write as if that once they're in dot git hooks that doesn't get back
up okay so let's review how a git hook might work so the one that I use the only ones that I've
used have been post received that is they get triggered after a commit has been received there are
other types of hooks and like I say you can look at the samples to see what's possible but post
receive I feel is a pretty common one so that and that's certainly the one that I've used
which is probably why I think it's so common but yeah I mean I think it is common because
a lot of times what you'll want to do is you'll want to get a push and then you'll want to analyze
it and see okay well what if I what exactly have I received oh I've gotten something for the dev branch
well then I should email the the the person who needs to approve this commit and then they'll get
the email they'll go check it and then they'll they'll they'll review it and they'll merge it
to master or oh this is a push to master I should make sure that I I don't know actually what
you would do on master well like I say if it's a to master and it's you know you're doing web
development maybe you want to copy all that content to a web directory and and that way all of
your your changes go live and for the world to see that sort of thing so it's pretty common I think
to to look at the branch to which something has been pushed and then to trigger some action
based on that and there are a couple of different ways to find that information out like I've
like I've said we've got a couple of different variables here that get is aware of and we know for
instance that dollar sign one is going to hold the name of the of the place that the person pushed
to we know that dollar sign two is going to contain that you're the URL and everything after that
three four five six is going to be local reference local shawesome remote reference remote shawesome
so what you really want there is the ref name is what it's called that's the that's what would
tell you the branch to which this is being pushed so the way that you can find that well there are
two different ways the the way that I know how to do it is the bad way because I the only get hook
programming that I've ever done is it has been in TCSH and TCSH if you're familiar with it is a
horrible shell but that's what I know for this purpose so the the sort of I'll call it the canonical
incantation for finding the ref name in a get push is hash bang slash bin slash TCSH and then for
each arg so for each is all one word in TCSH space arg space parentheses dollar sign less than
close parentheses and then you want to set arg v to equal parentheses dollar sign arg close
parentheses and you want to set ref name equal dollar sign one and that's the end of your loop so
end that for loop basically reads in the first argument which is dollar sign one and then loops
it over over again and over writes that with the value of the second one which is dollar sign two
and then again with a third which is dollar sign three and so on and this is simply the way to
finally end up with the last argument which will happen to be the ref name and I happen to know
that because I've done it a lot now in bash you could do it actually a lot better you could just
use a bash array and then you could just tell it which which item in your array to look at but
TCSH doesn't have arrays so I just you just have to loop constantly until you until you run out of
arguments and it just so happens that I know that you will be left with the ref name
now once you have the ref name you've got basically the contents well you you have access I
should say to what the branch name is and you can you you have to do a little bit of parsing
but it's it's totally possible so set space branch space equals space back to get space rev dash
parse space dash dash symbolic space dash dash a brev dash ref space dollar sign ref name
close the back tick and now you've got your branch name so get rev parse dash dash symbolic dash
dash a brev ref dollar sign ref name provides you the the the the human readable string label of
the branch that has just been that that is receiving a push now with that information of course
you can do whatever you want from there you can say okay well let's set up an if loop and if branch
equals or I guess it could be what what are they called switches or cases or something but anyway
I again TCSH is what I've been using so or forget hooks so I would do like an if parentheses branch
equals equals master close parentheses then then do you know whatever you want to do with the
master branch if if it equals dev then do something else and so on to actually use your get hook
and when I say so on I do mean it can do anything I mean this is running on your server so you if
you want to play a song whenever something is pushed to master then you can do that you can trigger
you know ff play or or impact 123 or or aug 123 whatever you want you can just do whatever you
need to do with your script it is a it is a system level script that can that it has access to your
entire server so tramad plus x well so you put your little post receive script in dot get hooks
gets dot get slash hooks in your repository so the name of the script should be post dash receive
that's what you would want to call it so that get knows when to run it now all again all the
samples in dot get hooks are they're they're they're they're suffixed with dot sample so they don't
run but if you call it post dash receive and you tramad it with executable permissions then it will
run on upon post received when when get gets a push so tramad plus x slash food dot get or wherever
you put your repository slash dot get slash hooks slash post dash receive assuming this post receive
is the one that we just wrote together so now when any user commits to to our master branch
then the get hook is triggered the post receive hook is triggered and whatever you've assigned
you know whatever you've provided for that condition then happens so whether it's publishing stuff
to a website or playing a song or emailing a developer to say hey you need to approve this and merge
it at your at your leisure whatever that's how you do it so get hooks are really powerful they're
really cool they can do all kinds of cool things and it can it's it's it's more than just kind of
oh this is kind of cool it's it's really it's about integrating get into your workflow I've I've
used get to publish stuff to my web directory on a on a random server that I have out there
for for years now and it's just it's a beautiful process because I can just go into my get directory
switch over to my development branch do my little hacking on the little website stuff the HTML
and CSS and then I look at it make sure it looks sane merged into master and then push and when
it gets pushed and if so if I'm not done then I can push it to dev right I push it to dev and
nothing happens no get hook is is triggered well the post receive is triggered but it looks at
the branch and it says was it master no okay never mind I'm not doing anything so then if I if
I finally am ready then I can get merge master or get merge dev rather front from master and then
get push origin head and then the get hook again because it got her push it's triggered and it
looks at the mass at the branch the ref name gets the branch from the ref name and it says yep
this is a master this was a push to master so so we need to copy all these files over to far
www and suddenly it's live it's a beautiful beautiful thing it's really really neat and you
should do it and that's that's how to run a get server raw pure get server no nothing between
you and get it's just you get and a bunch of users not the most convenient thing next episode
I'm going to talk about get a light you've been listening to hecka public radio at hecka
public radio dot org we are a community podcast network that release the shows every weekday
Monday through Friday today's show like all our shows was contributed by an hbr listener like
yourself if you ever thought of recording a podcast then click on our contribute link to find
out how easy it really is hecka public radio was founded by the digital dog pound and the
infonominant computer club and it's part of the binary revolution at binrev.com if you have
comments on today's show please email the host directly leave a comment on the website or record
a follow up episode yourself unless otherwise status today's show is released on the creative
comments attribution share a light 3.0 license