Git is the source code management system used for the Linux kernel and many other highly complex projects. It was written by Linux Torvalds after some controversy over the proprietary Bitkeeper program that used to manage the Linux kernel.
I've needed to upgrade my skills recently to use git in place of subversion because that is what my shop decided to use. I've moved all my Rails code into a remote git server and so far, so good. In one project, I was asked to track large video files with git and ran into a problem. When pushing files to a remote repository, git tries to compress all files in memory before sending. I got out of memory errors and had to commit a few files at a time.
One improvement is it has fewer "droppings" than subversion. There is no hidden .svn directory in each directory with source code. Only a single .git directory at the root of the project, plus a .gitignore file for files you don't want git to track.
Initialize project tracking
git init
Check out an existing project from remote server
git clone ssh://server/git/project
Add a file for git to track
git add
Add all files from this directory and below for git to track
git add .
Commit all files to local repository
git commit -a -m "message"
Undo changes to a file (re-check out from repository)
git checkout --
Undo the most recent commit
git reset --soft HEAD~1
Pull files from remote repository and merge with local repository
git pull
Push files to remote repository (must commit first)
git push
Move file or directory to new location
git mv path destination
Remove file or directory from the working tree (stops tracking, but doesn't delete)
git rm --cached /path/to/file
Remove file or directory from the working tree (deletes the file)
git rm /path/to/file
To create a remote repository from an existing project takes several steps
cd /tmp
git clone --bare /path/to/project (creates a /tmp/project.git directory)
scp project.git to remote server
cd /path/to/project
git remote add origin ssh://server/git/project
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
Branches
Create a new branch
git checkout -b mybranch
After committing all changes to the new branch, you eventually need to merge those back into the master repository (usually origin/master) with the following four steps.
Switch back to the origin
git checkout origin
Merge in the new branch as one commit (no fast forward)
git merge --no-ff mybranch
Delete the branch
git branch -d mybranch
Push to master repository
git push origin
This is a good article on branch and release management.
Another simple guide on the basics.
Updating the master repo after a hard reset
git clone ssh://repo-server/repos/project.git .
git reset --hard 89480e60
touch dummy.txt
git add .
git commit -m "Rolled back (added dummy.txt, can be removed later)"
git push --force
No comments:
Post a Comment