Unix 103: final changes before tutorial
authorKyle Spaans <kspaans@student.math.uwaterloo.ca>
Thu, 23 Jul 2009 20:00:18 +0000 (16:00 -0400)
committerKyle Spaans <kspaans@student.math.uwaterloo.ca>
Thu, 23 Jul 2009 20:01:25 +0000 (16:01 -0400)
code-management.pod

index 58f38f2..374e768 100644 (file)
@@ -212,7 +212,14 @@ Git's nickname for the latest commit in the current branch.
 
 Similar to Git's working directory, except this is the copy of the repository
 that you have checked out. You will do all of your work, and issue all C<svn>
-commands in the directory where your working copy is.
+commands in the same directory as your working copy.
+
+=back
+
+=head3 Delete files with C<git rm> or C<svn delete>
+
+It's important to remove files with these commands so that the repository knows
+that you indend to remove the file and can record this in the history.
 
 =head3 Get oriented with C<git status>
 
@@ -236,8 +243,9 @@ commit, type C<git diff --cached>.
 
 =head3 Compare two files with C<svn diff>
 
-To compare the contents of working copy with the latest version in the
-repository. See the changes made to only a single file with C<svn diff F<file>>.
+Compare the contents of working copy with the latest version in the
+repository with C<svn diff>. See the changes made to only a single file with
+C<svn diff F<file>>.
 
 =head3 Checking out old versions of files with C<git checkout>
 
@@ -247,13 +255,17 @@ issuing C<git checkout F<file>> will update F<file> using the contents of the
 index. Alternatively C<git checkout I<version> F<file>> will update F<file>
 using the contents from I<version>, which can be a commit.
 
-E.G. C<git checkout HEAD^ hello.c>
+For example, C<git checkout HEAD^ F<file>>, will replace the contents of
+F<file> with the second newest version. The C<^> symbol means the parent
+of the commit. To get older versions, you can use other special symbols
+or specific commit identifiers (SHA1 hash). C<git checkout 23deadbeef F<file>>
 
-=head3 Checking out old versions of files with C<svn revert>
+=head3 Checking out old versions of files with C<svn update -r num [F<file>]>
 
-The C<svn revert -r num F<file>> command is used for checking out different versions of
-You can also fix mistakes by reverting to older versions of a file, ignoring any
-changes made to your working copy.
+While C<svn update> is normally used to synchronize your working copy with the
+repository, you can also use it get older revisions of a file, or of the entire
+working copy. Alternatively, you can use C<svn cat -r num F<file>> to print the
+contents of an old revision number to your screen (or redirect to a file).
 
 =head3 Fixing Mistakes with C<git reset> and C<git revert>
 
@@ -268,7 +280,7 @@ C<git reset>. C<git reset --hard HEAD~2>. If you want to publicly admit to your
 mistakes you can record this in your history by using C<git revert> instead. It
 will create a commit specifying that you've reverted things. You will need to
 specifically revert each commit by refering to it's commit ID.
-C<git revert some-commit> will do this.
+C<git revert 45feedbee> will do this.
 
 Did you forget something or mistype your commit message? Use
 C<git commit --amend> to modify the most recent commit.
@@ -280,6 +292,11 @@ someone else has seen the state of your repository between when you made a
 commit and when you changed the history they could get very confused! Or worse,
 Git will get very confused.
 
+=head3 Fixing Mistakes with C<svn revert>
+
+You can also fix mistakes by reverting all changes in your working copy.
+It can also be used to "un-add" files.
+
 =head2 More Advanced Usage
 
 Some less common or more tool-specific commands.
@@ -301,8 +318,9 @@ Branching is as easy as C<git branch some-branch>. Use C<git checkout> to
 switch branches. Branches are good for expermients or seperate topics on the
 same code base. If an experiment is successful, you can merge it back into your
 I<master> branch with
- git checkout master
- git merge some-branch
+
+       git checkout master
+       git merge some-branch
 
 =head3 Inspecting History: Since when?
 
@@ -314,24 +332,24 @@ which is the same as C<git log HEAD~3.. F<file>>.
 You can search every file tracked by git in your current directory for a
 regular expression pattern using C<git grep "pattern">.
 
+=for comment
 =head2 Sharing Repositories
-
 Without VCS, sharing development of source code would be almost impossible.
-
 Because of Git's distributed nature, there are many ways you can setup sharing
 of your repository. Push/pull model. Permissions.
-
 If you set the permissions correctly when you setup your Subversion repository
 then it is already setup for sharing. Someone else can checkout the project and
 C<svn update> and C<svn commit>. Alternatively if you don't want to give
 someone else write (commit) access to your repository, they can generate
 patches with C<svn diff>.
+=end comment
 
 =head3 Merge Conflicts
 
 The biggest headache when you merge someone else's code is the conflicts that
 can arise! When you C<git merge some-branch> Git will tell you if there are
 conflicts:
+
  kspaans@csclub:~/foo$ git merge otherbranch
  Auto-merged blahfile
  CONFLICT (content): Merge conflict in blahfile
@@ -353,6 +371,7 @@ conflicts:
  #       unmerged:   blahfile
  #
  no changes added to commit (use "git add" and/or "git commit -a")
+
 You can see the conflict markers that Git added, and the output from
 C<git status> will indicate that you are in the middle of a failed merge. Fix
 the conflicting files with your text editor and commit them. Git will have
@@ -376,10 +395,14 @@ version 2.0 available at L<http://www.perlfoundation.org/artistic_license_2_0>.
 A 3rd year Computational Math student, Kyle has been in and around the CSC
 since his first term at Waterloo. He's been using Linux for years now, and
 thinks the command line and command line-based tools are important for every
-*nix user to know.
-
-=head2 TODO
+*nix user to know. Kyle would like to thank Sarah Pidcock and Kai Joshi for
+their help with the Subversion part of this tutorial.
 
+=for comment
+TODO
 Find out exactly which undergrad machines have git installed. Make sure that
 svn works as expected on those same machines (or all machines).
 Paradigm differences between git and svn.
+Add a screen-cast to go along with this, showing working examples of all
+operations.
+=end comment