2010-06-03 13:01:40 +00:00
|
|
|
---
|
|
|
|
layout: reference
|
|
|
|
---
|
2010-06-03 14:25:55 +00:00
|
|
|
|
2010-06-03 13:01:40 +00:00
|
|
|
<div class="box">
|
|
|
|
<h2>Getting and Creating Projects</h2>
|
|
|
|
<div class="block">
|
2010-06-03 14:25:55 +00:00
|
|
|
<p>
|
|
|
|
In order to do anything in Git, you have to have a Git repository. This
|
|
|
|
is where Git stores the data for the snapshots you are saving.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
There are two main ways to get a Git repository. One way is to simply
|
|
|
|
initialize a new one from an existing directory, such as a new project or
|
|
|
|
a project new to source control. The second way is to clone one from a
|
|
|
|
public Git repository, as you would do if you wanted a copy or wanted to
|
|
|
|
work with someone on a project. We will cover both of these here.
|
|
|
|
</p>
|
2010-06-03 13:01:40 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2010-06-03 14:25:55 +00:00
|
|
|
|
|
|
|
<div class="box">
|
|
|
|
<h2>
|
|
|
|
<span class="docs">
|
2010-06-04 08:31:57 +00:00
|
|
|
<a target="new" href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html">docs</a>
|
|
|
|
<a target="new" href="http://progit.org/book/ch2-1.html#initializing_a_repository_in_an_existing_directory">book</a>
|
2010-06-03 14:25:55 +00:00
|
|
|
</span>
|
|
|
|
<a name="init">git init</a>
|
|
|
|
<span class="desc">initializes a directory as a Git repository</span>
|
|
|
|
</h2>
|
|
|
|
|
|
|
|
<div class="block">
|
|
|
|
To create a repository from an existing directory of files, you can
|
|
|
|
simply run <code>git init</code> in that directory. For example,
|
|
|
|
let's say we have a directory with a few files in it, like this:
|
|
|
|
|
|
|
|
<pre>
|
2010-06-10 21:43:36 +00:00
|
|
|
<b>$ cd konichiwa</b>
|
|
|
|
<b>$ ls</b>
|
2010-06-03 14:25:55 +00:00
|
|
|
README hello.rb
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
This is a project where we are writing examples of the "Hello World"
|
|
|
|
program in every language. So far, we just have Ruby, but hey, it's
|
|
|
|
a start. To start version controlling this with Git, we can simply
|
|
|
|
run <code>git init</code>.
|
|
|
|
|
|
|
|
<pre>
|
2010-06-10 21:43:36 +00:00
|
|
|
<b>$ git init</b>
|
2010-06-03 14:25:55 +00:00
|
|
|
Initialized empty Git repository in /opt/konichiwa/.git/
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Now you can see that there is a <code>.git</code> subdirectory in your
|
|
|
|
project. This is your Git repository where all the data of your
|
|
|
|
project snapshots are stored.
|
|
|
|
|
|
|
|
<pre>
|
2010-06-10 21:43:36 +00:00
|
|
|
<b>$ ls -a</b>
|
2010-06-03 14:25:55 +00:00
|
|
|
. .. .git README hello.rb
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
Congratulations, you now have a skeleton Git repository and can start
|
|
|
|
snapshotting your project.
|
|
|
|
|
2010-06-04 08:31:57 +00:00
|
|
|
<p class="nutshell">
|
|
|
|
<strong>In a nutshell</strong>, you use <code>git init</code> to make an
|
|
|
|
existing directory of content into a new Git repository. You can do this
|
|
|
|
in any directory at any time, completely locally.</p>
|
|
|
|
|
2010-06-03 14:25:55 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="box">
|
|
|
|
<h2>
|
|
|
|
<span class="docs">
|
2010-06-04 08:31:57 +00:00
|
|
|
<a target="new" href="http://www.kernel.org/pub/software/scm/git/docs/git-clone.html">docs</a>
|
|
|
|
<a target="new" href="http://progit.org/book/ch2-1.html#cloning_an_existing_repository">book</a>
|
2010-06-03 14:25:55 +00:00
|
|
|
</span>
|
|
|
|
<a name="clone">git clone</a>
|
|
|
|
<span class="desc">copy a git repository so you can add to it</span>
|
|
|
|
</h2>
|
|
|
|
<div class="block">
|
|
|
|
<p>
|
|
|
|
If you need to collaborate with someone on a project, or if you want to
|
|
|
|
get a copy of a project so you can look at or use the code, you will
|
|
|
|
clone it. You simply run the <code>git clone [url]</code> command with
|
|
|
|
the URL of the project you want to copy.
|
|
|
|
</p>
|
|
|
|
|
2010-06-04 08:31:57 +00:00
|
|
|
<pre>
|
|
|
|
<b>$ git clone git://github.com/schacon/simplegit.git</b>
|
|
|
|
Initialized empty Git repository in /private/tmp/simplegit/.git/
|
|
|
|
remote: Counting objects: 100, done.
|
|
|
|
remote: Compressing objects: 100% (86/86), done.
|
|
|
|
remote: Total 100 (delta 35), reused 0 (delta 0)
|
|
|
|
Receiving objects: 100% (100/100), 9.51 KiB, done.
|
|
|
|
Resolving deltas: 100% (35/35), done.
|
|
|
|
<b>$ cd simplegit/</b>
|
|
|
|
<b>$ ls</b>
|
|
|
|
README Rakefile <span class="blue">lib</span>
|
|
|
|
</pre>
|
2010-06-03 14:25:55 +00:00
|
|
|
|
|
|
|
<p>
|
|
|
|
This will copy the entire history of that project so you have it locally
|
|
|
|
and it will give you a working directory of the main branch of that project
|
|
|
|
so you can look at the code or start editing it. If you change into the
|
|
|
|
new directory, you can see the <code>.git</code> subdirectory - that is
|
|
|
|
where all the project data is.
|
|
|
|
</p>
|
|
|
|
|
2010-06-04 08:31:57 +00:00
|
|
|
<pre>
|
|
|
|
<b>$ ls -a</b>
|
|
|
|
. .. <span class="blue">.git</span> README Rakefile <span class="blue">lib</span>
|
|
|
|
<b>$ cd .git</b>
|
|
|
|
<b>$ ls</b>
|
|
|
|
HEAD description <span class="blue">info</span> packed-refs
|
|
|
|
<span class="blue">branches hooks logs refs</span>
|
|
|
|
config index <span class="blue">objects</span>
|
|
|
|
</pre>
|
2010-06-03 14:25:55 +00:00
|
|
|
|
|
|
|
<p>
|
|
|
|
By default, Git will create a directory that is the same name as the
|
|
|
|
project in the URL you give it - basically whatever is after the last slash
|
|
|
|
of the URL. If you want something different, you can just put it at the
|
|
|
|
end of the command, after the URL.
|
|
|
|
</p>
|
|
|
|
|
2010-06-04 08:31:57 +00:00
|
|
|
<p class="nutshell">
|
|
|
|
<strong>In a nutshell</strong>, you use <code>git clone</code> to get a
|
|
|
|
local copy of a Git repository so you can look at it or start modifying
|
|
|
|
it.</p>
|
|
|
|
|
2010-06-03 14:25:55 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<p><a href="/basic">On to Basic Snapshotting »</a></p>
|