As far as this is a blog, I'm uploading assorted tech notes. More content is more reason to read. Or from another angle, a dry list of out-of-date software projects is fairly pointless. My personal world is mostly targeted on what I have time to achieve. This means in some places I am myopic on a particular tech tree. Broad overviews should help perspective.
Source control is necessary for all long term projects, and again for parallel development projects. There are a variety of tools to do this, but basically they add data integrity mechanisms to text files (like SQL engines do).
Git is a tool for massively concurrent software development. It scales better than svn (you may wish to read “the redbean book”), as its structured differently. It runs abit faster for some operations. It is du jour, and originally created by Linus Torvalds. It is massively better than CVS or RCS in my opinion. This is due to the more complicated design model, which matches current large projects. There is another DRCS called Mercurial, which I have yet to use. This is better documented in this book. Diligence will make me list other operating systems, Microsoft have a VSS product, although the wiki article is interesting. This looks like a better multi-developer tool source-vault. Alternatively, this is a frontend for traditional CLI interfaces.
For a more detailed look on the options, see this massive list. Discussions on tools are useful 1, 2.
There are alot of “introduction to GIT” articles on the web. It seems pointless to duplicate anyone else work. Please read some of the following :
- The entire GIT manual
- Configuring GIT for first use
- How-to github (a site for hosting your git-backed project source)
- Initial checkout
- Branches in GIT
- Repo management
- Commit control
For normal operating systems, I would recommend using your package manager, same as normal. If you use ms Windows, GIT may be acquired from git-scm or a windows specific build. Apple Mac should be able to use normal tools, or otherwise it is available. If you are developing from a phone, it looks like it necessary to use the web interface.
To publicly host your GIT backed projects one may use:
Methods for useful features that are omitted from the above articles.Basic Note: Create a new branch with older data (like a symlink)
git checkout -b $name $changeid
Basic note: create a branch with a different remote name (for those of us with spelling issues)
git checkout $myBrnachName git push $remoteRepo $myBranchName # in many cases $remoteRepo will be origin, but it doesn't need to be.
List changed files since branch creation
git cherry $remoteRepo $branchName git diff --name-only $firstListedId $lastListedId # I think this could be scripted to extract the first and last ids out, the do the second call automatically.
List change set since branch creation
git cherry $remoteRepo $currentBranch git diff $firstListedId $lastListedId
A method to fix annoying spelling issues.
git commit $file -m “i have aspellidg drgdrgd " # oops git reset --soft HEAD^ git commit $file -m “I can now spell properly."
Force change branch, because its faster than deleting random test code.
* Courtesy of J van Buskirk.
git checkout -f $branchName
Delete unneeded branches (from the local side).
# test obviously git remote prune origin --dry-run # update remote data git remote prune origin # delete local branch git branch -d <branch_name> git remote show public
Tidy up the local repo, including directories
# -n does a dry run first git clean -fdn git clean -fd
Put a branch upto the server with a different name.
git push -u origin $localName:$niceName
Detect branches that have been merged into the trunk (so may be deleted)
# Assuming you want comparison to the master branch, git branch --merged master # comparison to current branch git branch --merged
Allow upload when you have many server certs keys for server interaction
# if ssh-add -l reports a list of keys, which don't include your repo cert, you can't upload via SSH. # Either set your git remote to HTTPS, or export GIT_SSH_COMMAND=“ssh -o PreferredAuthentications=password” # requires gt > 2.3, but new git is generally better.
Allow upload when you want to use a client cert, but be using ssh-agent for server work.
Combine this with a second “deploy account” in git which is readonly, and its quite useful.
# if ssh-add -l reports a list of keys, which don't include your repo cert export GIT_SSH_COMMAND=“ssh -i ~/.ssh/my_private_key_rsa -o IdentitiesOnly=yes” # requires gt > 2.3, but new git is generally better.
# to diff between branches, WITHOUT WHITESPACE git diff -w --word-diff-regex=[^[:space:]] $branch1 $branch2 # or, trivial extension, per file git diff -w --word-diff-regex=[^[:space:]] $branch1 $branch2 -- $file
My development model with GIT for the iceline project is much simpler than this, although I will do things like I do at work, when other people are involved. I only upload to the GIT server features that have completed testing, and as I am the only creator, there can't be any conflicts.