Significant addtions to branching chapter
This commit is contained in:
parent
5878075c85
commit
43e59f77de
124
git-primer.tex
124
git-primer.tex
@ -469,10 +469,128 @@ Let's go ahead and commit those using the following set of commands:
|
||||
|
||||
\input{include/branch001}
|
||||
|
||||
Notice that we don't have a remote repository at this point, so all we are doing is making commits.
|
||||
Notice that we don't have a remote repository at this point, so all we are doing is making commits. Running \texttt{git status} gives us this output:
|
||||
|
||||
\begin{Verbatim}[frame=lines, numbers=left, xleftmargin=5mm, framesep=3mm, breaklines=true, label=\fbox{}]
|
||||
On branch main
|
||||
nothing to commit, working tree clean
|
||||
\end{Verbatim}
|
||||
|
||||
Let's suppose we want to make some edits in this file, but we're not sure if we're going to keep them—we're just testing. To do that, we'll create a new branch called ``testbranch'' with this command:
|
||||
|
||||
\input{include/branch002}
|
||||
|
||||
Git immediately gives us this message:
|
||||
|
||||
\begin{Verbatim}[]
|
||||
Switched to a new branch 'testbranch'
|
||||
\end{Verbatim}
|
||||
|
||||
Now we're going to add a new line to \texttt{doc\a.txt} so it looks like this:
|
||||
|
||||
\label{doc-aC2}
|
||||
\begin{Verbatim}[frame=lines, numbers=left, xleftmargin=5mm, framesep=3mm, breaklines=true, label=\fbox{doc\_a.txt New Contents}]
|
||||
This is line A1.
|
||||
This is line A2.
|
||||
This is line B1.
|
||||
\end{Verbatim}
|
||||
|
||||
Now if we run \texttt{git status}, we'll see this:
|
||||
|
||||
\begin{Verbatim}[]
|
||||
On branch testbranch
|
||||
Changes not staged for commit:
|
||||
(use "git add <file>..." to update what will be committed)
|
||||
(use "git restore <file>..." to discard changes in working directory)
|
||||
modified: doc_a.txt
|
||||
|
||||
no changes added to commit (use "git add" and/or "git commit -a")
|
||||
\end{Verbatim}
|
||||
|
||||
Again, Git provides us with helpful information here. It's telling us that we are on ``testbranch'' and not our main branch, it tells us that we have changes in a file, and that we have yet not committed those changes. What it's not telling us is what those changes are. To do that, we use the \texttt{git diff} command:
|
||||
|
||||
\input{include/gitdiff}
|
||||
|
||||
Which gives us this output:
|
||||
|
||||
\begin{Verbatim}[frame=lines, numbers=left, xleftmargin=5mm, framesep=3mm, breaklines=true, label=\fbox{Output of git diff}]
|
||||
diff --git a/doc_a.txt b/doc_a.txt
|
||||
index ea9c135..01b52bf 100644
|
||||
--- a/doc_a.txt
|
||||
+++ b/doc_a.txt
|
||||
@@ -1,2 +1,3 @@
|
||||
This is line A1.
|
||||
This is line A2.
|
||||
+This is line A3.
|
||||
\end{Verbatim}
|
||||
|
||||
In most terminals, this output will be color-coded, which is helpful on the fly, but we have line numbers here to help us. Let's take this line by line to understand what Git is telling us.
|
||||
|
||||
|
||||
\begin{itemize}
|
||||
\item Line 1 (\texttt{diff --git a/doc\_a.txt b/doc\_a.txt}) shows us that we are examining two different versions of the same file. Git is calling the original version ``a'' and the new version ``b''
|
||||
\item Line 2 (starting with ``\texttt{index}'') is meta data about the files, and is not terribly useful. \texttt{100644} shows that this is a normal file, rather than an executable one (which would be \texttt{100755}) or a symbolic link (which would be \texttt{120000}).
|
||||
\item Lines 3 and 4 show that Git is assigning a minus sign (-) to the ``a'' version of the file and a plus sing (+) to the ``b'' version of the file, which it will use starting in line 6.
|
||||
\item Line 5 is a \textbf{chunk header}. Git is not going to show you the entire contents of your file, but rather just the chunks that have differences. (Except in our example, which is a very small file.)
|
||||
\begin{itemize}
|
||||
\item The chunk header starts and ends with \texttt{@@}.
|
||||
\item ``\texttt{-1, 2}'' is actually three separate pieces of information. Git is telling us that it is going to show us 2 lines, starting at line 1, from the ``a'' version of our file (because of the minus sign at the beginning).
|
||||
\item ``\texttt{+1, 3}'' is again three separate pieces of information. Git is telling us that it is going to show us 3 lines, starting at line 1, from the ``b'' version of our file (because of the plus sign at the beginning).
|
||||
\end{itemize}
|
||||
\item Lines 6-8 are the lines that are different. Notice that line 8 starts with a plus sign, meaning that this line appears in version ``b'' only.
|
||||
\end{itemize}
|
||||
|
||||
Let's make a couple of other changes, and see how this output changes.
|
||||
|
||||
First, let's \textit{delete} the first line (``This is line A1.'').
|
||||
|
||||
Second, let's create a new file (which we'll call \texttt{doc\_b.txt}) which will contain a single line of text: ``This is line B1.''
|
||||
|
||||
Running \texttt{git diff} now gives us slightly different output:
|
||||
|
||||
\begin{Verbatim}[frame=lines, numbers=left, xleftmargin=5mm, framesep=3mm, breaklines=true, label=\fbox{Output of git diff}]
|
||||
diff --git a/doc_a.txt b/doc_a.txt
|
||||
index 01b52bf..505be23 100644
|
||||
--- a/doc_a.txt
|
||||
+++ b/doc_a.txt
|
||||
@@ -1,3 +1,2 @@
|
||||
-This is line A1.
|
||||
This is line A2.
|
||||
This is line A3.
|
||||
\end{Verbatim}
|
||||
|
||||
This is similar to before, but now we are seeing that line 6 now has a minus sign in front of it, because that line only exists in the original version of that file. But it doesn't show us any information about \texttt{doc\_b.txt} because file is completely new.
|
||||
|
||||
How does this test branch compare to our main branch? First, let's add both files (\texttt{git add -A}) and make a commit (\texttt{git commit -m "commit message"}). Now we can ask Git to tell us the difference between these two branches using this command:
|
||||
|
||||
\input{include/gitdiffbranch}
|
||||
|
||||
\begin{Verbatim}[frame=lines, numbers=left, xleftmargin=5mm, framesep=3mm, breaklines=true, label=\fbox{Output of git diff main testbranch}]
|
||||
diff --git a/doc_a.txt b/doc_a.txt
|
||||
index ea9c135..505be23 100644
|
||||
--- a/doc_a.txt
|
||||
+++ b/doc_a.txt
|
||||
@@ -1,2 +1,2 @@
|
||||
-This is line A1.
|
||||
This is line A2.
|
||||
+This is line A3.
|
||||
diff --git a/doc_b.txt b/doc_b.txt
|
||||
new file mode 100644
|
||||
index 0000000..3fc1659
|
||||
--- /dev/null
|
||||
+++ b/doc_b.txt
|
||||
@@ -0,0 +1 @@
|
||||
+This is line B1.
|
||||
\end{Verbatim}
|
||||
|
||||
Lines 2-8 tell us about ``doc\_a.txt'' and lines 9-15 tells us about ``doc\_b.txt''.
|
||||
|
||||
Notice that line 12 is telling us that the ``a'' version of ``\texttt{doc\_b.txt}'' (that is, the version that exists in the main branch) is ``\texttt{/dev/null}'' which is Git's way of telling us that this file does not exist at all in the main branch. In fact, line 14 shows us \texttt{-0,0} which means that Git is showing us zero lines starting at line zero from the ``a'' version of this file.
|
||||
|
||||
\section{Uses of Branching}
|
||||
|
||||
|
||||
|
||||
\todo[inline]{Talk about git \texttt{diff here}.}
|
||||
|
||||
|
||||
\chapter{Collaborating With Yourself — A Guide for Creatives}
|
||||
|
||||
|
3
include/branch002.tex
Normal file
3
include/branch002.tex
Normal file
@ -0,0 +1,3 @@
|
||||
\begin{Verbatim}[]
|
||||
$ git checkout -b testbranch
|
||||
\end{Verbatim}
|
3
include/gitdiff.tex
Normal file
3
include/gitdiff.tex
Normal file
@ -0,0 +1,3 @@
|
||||
\begin{Verbatim}[]
|
||||
$ git diff
|
||||
\end{Verbatim}
|
3
include/gitdiffbranch.tex
Normal file
3
include/gitdiffbranch.tex
Normal file
@ -0,0 +1,3 @@
|
||||
\begin{Verbatim}[]
|
||||
$ git diff main testbranch
|
||||
\end{Verbatim}
|
Loading…
Reference in New Issue
Block a user