ℹ️ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository |
| Last Crawled | 2026-04-15 05:32:55 (3 hours ago) |
| First Indexed | 2014-10-27 12:00:30 (11 years ago) |
| HTTP Status Code | 200 |
| Meta Title | Git - Getting a Git Repository |
| Meta Description | null |
| Meta Canonical | null |
| Boilerpipe Text | If you can read only one chapter to get going with Git, this is it.
This chapter covers every basic command you need to do the vast majority of the things you’ll eventually spend your time doing with Git.
By the end of the chapter, you should be able to configure and initialize a repository, begin and stop tracking files, and stage and commit changes.
We’ll also show you how to set up Git to ignore certain files and file patterns, how to undo mistakes quickly and easily, how to browse the history of your project and view changes between commits, and how to push and pull from remote repositories.
You typically obtain a Git repository in one of two ways:
You can take a local directory that is currently not under version control, and turn it into a Git repository, or
You can
clone
an existing Git repository from elsewhere.
In either case, you end up with a Git repository on your local machine, ready for work.
Initializing a Repository in an Existing Directory
If you have a project directory that is currently not under version control and you want to start controlling it with Git, you first need to go to that project’s directory.
If you’ve never done this, it looks a little different depending on which system you’re running:
for Linux:
$ cd /home/user/my_project
for macOS:
$ cd /Users/user/my_project
for Windows:
$ cd C:/Users/user/my_project
and type:
$ git init
This creates a new subdirectory named
.git
that contains all of your necessary repository files — a Git repository skeleton.
At this point, nothing in your project is tracked yet.
See
Git Internals
for more information about exactly what files are contained in the
.git
directory you just created.
If you want to start version-controlling existing files (as opposed to an empty directory), you should probably begin tracking those files and do an initial commit.
You can accomplish that with a few
git add
commands that specify the files you want to track, followed by a
git commit
:
$ git add *.c
$ git add LICENSE
$ git commit -m 'Initial project version'
We’ll go over what these commands do in just a minute.
At this point, you have a Git repository with tracked files and an initial commit.
Cloning an Existing Repository
If you want to get a copy of an existing Git repository — for example, a project you’d like to contribute to — the command you need is
git clone
.
If you’re familiar with other VCSs such as Subversion, you’ll notice that the command is "clone" and not "checkout".
This is an important distinction — instead of getting just a working copy, Git receives a full copy of nearly all data that the server has.
Every version of every file for the history of the project is pulled down by default when you run
git clone
.
In fact, if your server disk gets corrupted, you can often use nearly any of the clones on any client to set the server back to the state it was in when it was cloned (you may lose some server-side hooks and such, but all the versioned data would be there — see
Getting Git on a Server
for more details).
You clone a repository with
git clone <url>
.
For example, if you want to clone the Git linkable library called
libgit2
, you can do so like this:
$ git clone https://github.com/libgit2/libgit2
That creates a directory named
libgit2
, initializes a
.git
directory inside it, pulls down all the data for that repository, and checks out a working copy of the latest version.
If you go into the new
libgit2
directory that was just created, you’ll see the project files in there, ready to be worked on or used.
If you want to clone the repository into a directory named something other than
libgit2
, you can specify the new directory name as an additional argument:
$ git clone https://github.com/libgit2/libgit2 mylibgit
That command does the same thing as the previous one, but the target directory is called
mylibgit
.
Git has a number of different transfer protocols you can use.
The previous example uses the
https://
protocol, but you may also see
git://
or
user@server:path/to/repo.git
, which uses the SSH transfer protocol.
Getting Git on a Server
will introduce all of the available options the server can set up to access your Git repository and the pros and cons of each. |
| Markdown | [](https://git-scm.com/) \--fast-version-control

- [About](https://git-scm.com/about)
- [Trademark](https://git-scm.com/about/trademark)
- [Learn](https://git-scm.com/learn)
- [Book](https://git-scm.com/book)
- [Cheat Sheet](https://git-scm.com/cheat-sheet)
- [Videos](https://git-scm.com/videos)
- [External Links](https://git-scm.com/doc/ext)
- [Tools](https://git-scm.com/tools)
- [Command Line](https://git-scm.com/tools/command-line)
- [GUIs](https://git-scm.com/tools/guis)
- [Hosting](https://git-scm.com/tools/hosting)
- [Reference](https://git-scm.com/docs)
- [Install](https://git-scm.com/install/linux)
- [Community](https://git-scm.com/community)
***
This book is available in [English](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository).
Full translation available in
| |
|---|
| [azərbaycan dili](https://git-scm.com/book/az/v2/Git%E2%80%99in-%C6%8Fsaslar%C4%B1-Git-Deposunun-%C6%8Fld%C9%99-Edilm%C9%99si), |
| [български език](https://git-scm.com/book/bg/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%B8-%D0%BD%D0%B0-Git-%D0%A1%D1%8A%D0%B7%D0%B4%D0%B0%D0%B2%D0%B0%D0%BD%D0%B5-%D0%BD%D0%B0-Git-%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5), |
| [Deutsch](https://git-scm.com/book/de/v2/Git-Grundlagen-Ein-Git-Repository-anlegen), |
| [Español](https://git-scm.com/book/es/v2/Fundamentos-de-Git-Obteniendo-un-repositorio-Git), |
| [فارسی](https://git-scm.com/book/fa/v2/%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA-%DA%AF%DB%8C%D8%AA-git-basics-chapter-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%DB%8C%DA%A9-%D9%85%D8%AE%D8%B2%D9%86-%DA%AF%DB%8C%D8%AA-Getting-a-Git-Repository), |
| [Français](https://git-scm.com/book/fr/v2/Les-bases-de-Git-D%C3%A9marrer-un-d%C3%A9p%C3%B4t-Git), |
| [Ελληνικά](https://git-scm.com/book/gr/v2/%CE%A4%CE%B1-%CE%B8%CE%B5%CE%BC%CE%B5%CE%BB%CE%B9%CF%8E%CE%B4%CE%B7-%CF%83%CF%84%CE%BF%CE%B9%CF%87%CE%B5%CE%AF%CE%B1-%CF%84%CE%BF%CF%85-Git-%CE%91%CF%80%CF%8C%CE%BA%CF%84%CE%B7%CF%83%CE%B7-%CE%B1%CF%80%CE%BF%CE%B8%CE%B5%CF%84%CE%B7%CF%81%CE%AF%CE%BF%CF%85-Git), |
| [日本語](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-Git-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E5%8F%96%E5%BE%97), |
| [한국어](https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-Git-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0), |
| [Nederlands](https://git-scm.com/book/nl/v2/Git-Basics-Een-Git-repository-verkrijgen), |
| [Русский](https://git-scm.com/book/ru/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-Git-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F), |
| [Slovenščina](https://git-scm.com/book/sl/v2/Osnove-Git-Pridobivanje-repozitorija-Git), |
| [Српски](https://git-scm.com/book/sr/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B0-%D0%93%D0%B8%D1%82-%D0%9F%D1%80%D0%B0%D0%B2%D1%99%D0%B5%D1%9A%D0%B5-%D0%93%D0%B8%D1%82-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%98%D1%83%D0%BC%D0%B0), |
| [Svenska](https://git-scm.com/book/sv/v2/Grunderna-i-Git-Skaffa-ett-Git%E2%80%91kodf%C3%B6rr%C3%A5d), |
| [Tagalog](https://git-scm.com/book/tl/v2/Mga-Pangunahing-Kaalaman-sa-Git-Pagkuha-ng-Repositoryo-ng-Git), |
| [Türkçe](https://git-scm.com/book/tr/v2/Git-Temelleri-Bir-Git-Reposu-Olu%C5%9Fturma/Kopyalama). |
| [Українська](https://git-scm.com/book/uk/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%B8-Git-%D0%A1%D1%82%D0%B2%D0%BE%D1%80%D0%B5%D0%BD%D0%BD%D1%8F-Git-%D1%81%D1%85%D0%BE%D0%B2%D0%B8%D1%89%D0%B0), |
| [简体中文](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93), |
Partial translations available in
| |
|---|
| [Čeština](https://git-scm.com/book/cs/v2/Z%C3%A1klady-pr%C3%A1ce-se-syst%C3%A9mem-Git-Z%C3%ADsk%C3%A1n%C3%AD-repozit%C3%A1%C5%99e-Git), |
| [Македонски](https://git-scm.com/book/mk/v2/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5-%D0%BD%D0%B0-Git-%D0%94%D0%BE%D0%B1%D0%B8%D0%B2%D0%B0%D1%9A%D0%B5-%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B8%D1%88%D1%82%D0%B5-%D0%B7%D0%B0-Git), |
| [Polski](https://git-scm.com/book/pl/v2/Podstawy-Gita-Pierwsze-repozytorium-Gita), |
| [Português (Brasil)](https://git-scm.com/book/pt-br/v2/Fundamentos-de-Git-Obtendo-um-Reposit%C3%B3rio-Git), |
| [Ўзбекча](https://git-scm.com/book/uz/v2/Git-%D0%B0%D1%81%D0%BE%D1%81%D0%BB%D0%B0%D1%80%D0%B8-Git-%D0%BE%D0%BC%D0%B1%D0%BE%D1%80%D0%B8%D0%BD%D0%B8-%D1%8F%D1%80%D0%B0%D1%82%D0%B8%D1%88), |
| [繁體中文](https://git-scm.com/book/zh-tw/v2/Git-%E5%9F%BA%E7%A4%8E-%E5%8F%96%E5%BE%97%E4%B8%80%E5%80%8B-Git-%E5%80%89%E5%84%B2), |
Translations started for
| |
|---|
| [Беларуская](https://git-scm.com/book/be/v2/Git-Basics-Getting-a-Git-Repository), |
| [Indonesian](https://git-scm.com/book/id/v2/Git-Basics-Mendapatkan-Repository-Git), |
| [Italiano](https://git-scm.com/book/it/v2/Git-Basics-Getting-a-Git-Repository), |
| [Bahasa Melayu](https://git-scm.com/book/ms/v2/Git-Basics-Getting-a-Git-Repository), |
| [Português (Portugal)](https://git-scm.com/book/pt-pt/v2/No%C3%A7%C3%B5es-B%C3%A1sicas-do-Git-Obtendo-um-Reposit%C3%B3rio-Git). |
***
The source of this book is [hosted on GitHub.](https://github.com/progit/progit2)
Patches, suggestions and comments are welcome.
[Chapters ▾](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)
1. ## 1\. [Getting Started](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)
1. 1\.1 [About Version Control](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)
2. 1\.2 [A Short History of Git](https://git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git)
3. 1\.3 [What is Git?](https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F)
4. 1\.4 [The Command Line](https://git-scm.com/book/en/v2/Getting-Started-The-Command-Line)
5. 1\.5 [Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
6. 1\.6 [First-Time Git Setup](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup)
7. 1\.7 [Getting Help](https://git-scm.com/book/en/v2/Getting-Started-Getting-Help)
8. 1\.8 [Summary](https://git-scm.com/book/en/v2/Getting-Started-Summary)
2. ## 2\. [Git Basics](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)
1. 2\.1 [Getting a Git Repository](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)
2. 2\.2 [Recording Changes to the Repository](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository)
3. 2\.3 [Viewing the Commit History](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History)
4. 2\.4 [Undoing Things](https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things)
5. 2\.5 [Working with Remotes](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
6. 2\.6 [Tagging](https://git-scm.com/book/en/v2/Git-Basics-Tagging)
7. 2\.7 [Git Aliases](https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases)
8. 2\.8 [Summary](https://git-scm.com/book/en/v2/Git-Basics-Summary)
3. ## 3\. [Git Branching](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)
1. 3\.1 [Branches in a Nutshell](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)
2. 3\.2 [Basic Branching and Merging](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging)
3. 3\.3 [Branch Management](https://git-scm.com/book/en/v2/Git-Branching-Branch-Management)
4. 3\.4 [Branching Workflows](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows)
5. 3\.5 [Remote Branches](https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches)
6. 3\.6 [Rebasing](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)
7. 3\.7 [Summary](https://git-scm.com/book/en/v2/Git-Branching-Summary)
4. ## 4\. [Git on the Server](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)
1. 4\.1 [The Protocols](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)
2. 4\.2 [Getting Git on a Server](https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server)
3. 4\.3 [Generating Your SSH Public Key](https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key)
4. 4\.4 [Setting Up the Server](https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server)
5. 4\.5 [Git Daemon](https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon)
6. 4\.6 [Smart HTTP](https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP)
7. 4\.7 [GitWeb](https://git-scm.com/book/en/v2/Git-on-the-Server-GitWeb)
8. 4\.8 [GitLab](https://git-scm.com/book/en/v2/Git-on-the-Server-GitLab)
9. 4\.9 [Third Party Hosted Options](https://git-scm.com/book/en/v2/Git-on-the-Server-Third-Party-Hosted-Options)
10. 4\.10 [Summary](https://git-scm.com/book/en/v2/Git-on-the-Server-Summary)
5. ## 5\. [Distributed Git](https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows)
1. 5\.1 [Distributed Workflows](https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows)
2. 5\.2 [Contributing to a Project](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project)
3. 5\.3 [Maintaining a Project](https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project)
4. 5\.4 [Summary](https://git-scm.com/book/en/v2/Distributed-Git-Summary)
1. ## 6\. [GitHub](https://git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration)
1. 6\.1 [Account Setup and Configuration](https://git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration)
2. 6\.2 [Contributing to a Project](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)
3. 6\.3 [Maintaining a Project](https://git-scm.com/book/en/v2/GitHub-Maintaining-a-Project)
4. 6\.4 [Managing an organization](https://git-scm.com/book/en/v2/GitHub-Managing-an-organization)
5. 6\.5 [Scripting GitHub](https://git-scm.com/book/en/v2/GitHub-Scripting-GitHub)
6. 6\.6 [Summary](https://git-scm.com/book/en/v2/GitHub-Summary)
2. ## 7\. [Git Tools](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection)
1. 7\.1 [Revision Selection](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection)
2. 7\.2 [Interactive Staging](https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging)
3. 7\.3 [Stashing and Cleaning](https://git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning)
4. 7\.4 [Signing Your Work](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work)
5. 7\.5 [Searching](https://git-scm.com/book/en/v2/Git-Tools-Searching)
6. 7\.6 [Rewriting History](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History)
7. 7\.7 [Reset Demystified](https://git-scm.com/book/en/v2/Git-Tools-Reset-Demystified)
8. 7\.8 [Advanced Merging](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging)
9. 7\.9 [Rerere](https://git-scm.com/book/en/v2/Git-Tools-Rerere)
10. 7\.10 [Debugging with Git](https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git)
11. 7\.11 [Submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules)
12. 7\.12 [Bundling](https://git-scm.com/book/en/v2/Git-Tools-Bundling)
13. 7\.13 [Replace](https://git-scm.com/book/en/v2/Git-Tools-Replace)
14. 7\.14 [Credential Storage](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage)
15. 7\.15 [Summary](https://git-scm.com/book/en/v2/Git-Tools-Summary)
3. ## 8\. [Customizing Git](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)
1. 8\.1 [Git Configuration](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)
2. 8\.2 [Git Attributes](https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes)
3. 8\.3 [Git Hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
4. 8\.4 [An Example Git-Enforced Policy](https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy)
5. 8\.5 [Summary](https://git-scm.com/book/en/v2/Customizing-Git-Summary)
4. ## 9\. [Git and Other Systems](https://git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client)
1. 9\.1 [Git as a Client](https://git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client)
2. 9\.2 [Migrating to Git](https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git)
3. 9\.3 [Summary](https://git-scm.com/book/en/v2/Git-and-Other-Systems-Summary)
5. ## 10\. [Git Internals](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain)
1. 10\.1 [Plumbing and Porcelain](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain)
2. 10\.2 [Git Objects](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects)
3. 10\.3 [Git References](https://git-scm.com/book/en/v2/Git-Internals-Git-References)
4. 10\.4 [Packfiles](https://git-scm.com/book/en/v2/Git-Internals-Packfiles)
5. 10\.5 [The Refspec](https://git-scm.com/book/en/v2/Git-Internals-The-Refspec)
6. 10\.6 [Transfer Protocols](https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols)
7. 10\.7 [Maintenance and Data Recovery](https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery)
8. 10\.8 [Environment Variables](https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables)
9. 10\.9 [Summary](https://git-scm.com/book/en/v2/Git-Internals-Summary)
1. ## A1. [Appendix A: Git in Other Environments](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces)
1. A1.1 [Graphical Interfaces](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces)
2. A1.2 [Git in Visual Studio](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio)
3. A1.3 [Git in Visual Studio Code](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio-Code)
4. A1.4 [Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-IntelliJ-/-PyCharm-/-WebStorm-/-PhpStorm-/-RubyMine)
5. A1.5 [Git in Sublime Text](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Sublime-Text)
6. A1.6 [Git in Bash](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash)
7. A1.7 [Git in Zsh](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh)
8. A1.8 [Git in PowerShell](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell)
9. A1.9 [Summary](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Summary)
2. ## A2. [Appendix B: Embedding Git in your Applications](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git)
1. A2.1 [Command-line Git](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git)
2. A2.2 [Libgit2](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2)
3. A2.3 [JGit](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit)
4. A2.4 [go-git](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-go-git)
5. A2.5 [Dulwich](https://git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Dulwich)
3. ## A3. [Appendix C: Git Commands](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Setup-and-Config)
1. A3.1 [Setup and Config](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Setup-and-Config)
2. A3.2 [Getting and Creating Projects](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects)
3. A3.3 [Basic Snapshotting](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Basic-Snapshotting)
4. A3.4 [Branching and Merging](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Branching-and-Merging)
5. A3.5 [Sharing and Updating Projects](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects)
6. A3.6 [Inspection and Comparison](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison)
7. A3.7 [Debugging](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Debugging)
8. A3.8 [Patching](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Patching)
9. A3.9 [Email](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Email)
10. A3.10 [External Systems](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-External-Systems)
11. A3.11 [Administration](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Administration)
12. A3.12 [Plumbing Commands](https://git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Plumbing-Commands)
2nd Edition
# 2\.1 Git Basics - Getting a Git Repository
If you can read only one chapter to get going with Git, this is it. This chapter covers every basic command you need to do the vast majority of the things you’ll eventually spend your time doing with Git. By the end of the chapter, you should be able to configure and initialize a repository, begin and stop tracking files, and stage and commit changes. We’ll also show you how to set up Git to ignore certain files and file patterns, how to undo mistakes quickly and easily, how to browse the history of your project and view changes between commits, and how to push and pull from remote repositories.
## Getting a Git Repository
You typically obtain a Git repository in one of two ways:
1. You can take a local directory that is currently not under version control, and turn it into a Git repository, or
2. You can *clone* an existing Git repository from elsewhere.
In either case, you end up with a Git repository on your local machine, ready for work.
### Initializing a Repository in an Existing Directory
If you have a project directory that is currently not under version control and you want to start controlling it with Git, you first need to go to that project’s directory. If you’ve never done this, it looks a little different depending on which system you’re running:
for Linux:
```
$ cd /home/user/my_project
```
for macOS:
```
$ cd /Users/user/my_project
```
for Windows:
```
$ cd C:/Users/user/my_project
```
and type:
```
$ git init
```
This creates a new subdirectory named `.git` that contains all of your necessary repository files — a Git repository skeleton. At this point, nothing in your project is tracked yet. See [Git Internals](https://git-scm.com/book/en/v2/ch00/ch10-git-internals) for more information about exactly what files are contained in the `.git` directory you just created.
If you want to start version-controlling existing files (as opposed to an empty directory), you should probably begin tracking those files and do an initial commit. You can accomplish that with a few `git add` commands that specify the files you want to track, followed by a `git commit`:
```
$ git add *.c
$ git add LICENSE
$ git commit -m 'Initial project version'
```
We’ll go over what these commands do in just a minute. At this point, you have a Git repository with tracked files and an initial commit.
### Cloning an Existing Repository
If you want to get a copy of an existing Git repository — for example, a project you’d like to contribute to — the command you need is `git clone`. If you’re familiar with other VCSs such as Subversion, you’ll notice that the command is "clone" and not "checkout". This is an important distinction — instead of getting just a working copy, Git receives a full copy of nearly all data that the server has. Every version of every file for the history of the project is pulled down by default when you run `git clone`. In fact, if your server disk gets corrupted, you can often use nearly any of the clones on any client to set the server back to the state it was in when it was cloned (you may lose some server-side hooks and such, but all the versioned data would be there — see [Getting Git on a Server](https://git-scm.com/book/en/v2/ch00/_getting_git_on_a_server) for more details).
You clone a repository with `git clone <url>`. For example, if you want to clone the Git linkable library called `libgit2`, you can do so like this:
```
$ git clone https://github.com/libgit2/libgit2
```
That creates a directory named `libgit2`, initializes a `.git` directory inside it, pulls down all the data for that repository, and checks out a working copy of the latest version. If you go into the new `libgit2` directory that was just created, you’ll see the project files in there, ready to be worked on or used.
If you want to clone the repository into a directory named something other than `libgit2`, you can specify the new directory name as an additional argument:
```
$ git clone https://github.com/libgit2/libgit2 mylibgit
```
That command does the same thing as the previous one, but the target directory is called `mylibgit`.
Git has a number of different transfer protocols you can use. The previous example uses the `https://` protocol, but you may also see `git://` or `user@server:path/to/repo.git`, which uses the SSH transfer protocol. [Getting Git on a Server](https://git-scm.com/book/en/v2/ch00/_getting_git_on_a_server) will introduce all of the available options the server can set up to access your Git repository and the pros and cons of each.
[prev](https://git-scm.com/book/en/v2/Getting-Started-Summary) \| [next](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository)
[About this site](https://git-scm.com/site)
Patches, suggestions, and comments are welcome.
Git is a member of [Software Freedom Conservancy](https://git-scm.com/sfc) |
| Readable Markdown | If you can read only one chapter to get going with Git, this is it. This chapter covers every basic command you need to do the vast majority of the things you’ll eventually spend your time doing with Git. By the end of the chapter, you should be able to configure and initialize a repository, begin and stop tracking files, and stage and commit changes. We’ll also show you how to set up Git to ignore certain files and file patterns, how to undo mistakes quickly and easily, how to browse the history of your project and view changes between commits, and how to push and pull from remote repositories.
You typically obtain a Git repository in one of two ways:
1. You can take a local directory that is currently not under version control, and turn it into a Git repository, or
2. You can *clone* an existing Git repository from elsewhere.
In either case, you end up with a Git repository on your local machine, ready for work.
### Initializing a Repository in an Existing Directory
If you have a project directory that is currently not under version control and you want to start controlling it with Git, you first need to go to that project’s directory. If you’ve never done this, it looks a little different depending on which system you’re running:
for Linux:
```
$ cd /home/user/my_project
```
for macOS:
```
$ cd /Users/user/my_project
```
for Windows:
```
$ cd C:/Users/user/my_project
```
and type:
```
$ git init
```
This creates a new subdirectory named `.git` that contains all of your necessary repository files — a Git repository skeleton. At this point, nothing in your project is tracked yet. See [Git Internals](https://git-scm.com/book/en/v2/ch00/ch10-git-internals) for more information about exactly what files are contained in the `.git` directory you just created.
If you want to start version-controlling existing files (as opposed to an empty directory), you should probably begin tracking those files and do an initial commit. You can accomplish that with a few `git add` commands that specify the files you want to track, followed by a `git commit`:
```
$ git add *.c
$ git add LICENSE
$ git commit -m 'Initial project version'
```
We’ll go over what these commands do in just a minute. At this point, you have a Git repository with tracked files and an initial commit.
### Cloning an Existing Repository
If you want to get a copy of an existing Git repository — for example, a project you’d like to contribute to — the command you need is `git clone`. If you’re familiar with other VCSs such as Subversion, you’ll notice that the command is "clone" and not "checkout". This is an important distinction — instead of getting just a working copy, Git receives a full copy of nearly all data that the server has. Every version of every file for the history of the project is pulled down by default when you run `git clone`. In fact, if your server disk gets corrupted, you can often use nearly any of the clones on any client to set the server back to the state it was in when it was cloned (you may lose some server-side hooks and such, but all the versioned data would be there — see [Getting Git on a Server](https://git-scm.com/book/en/v2/ch00/_getting_git_on_a_server) for more details).
You clone a repository with `git clone <url>`. For example, if you want to clone the Git linkable library called `libgit2`, you can do so like this:
```
$ git clone https://github.com/libgit2/libgit2
```
That creates a directory named `libgit2`, initializes a `.git` directory inside it, pulls down all the data for that repository, and checks out a working copy of the latest version. If you go into the new `libgit2` directory that was just created, you’ll see the project files in there, ready to be worked on or used.
If you want to clone the repository into a directory named something other than `libgit2`, you can specify the new directory name as an additional argument:
```
$ git clone https://github.com/libgit2/libgit2 mylibgit
```
That command does the same thing as the previous one, but the target directory is called `mylibgit`.
Git has a number of different transfer protocols you can use. The previous example uses the `https://` protocol, but you may also see `git://` or `user@server:path/to/repo.git`, which uses the SSH transfer protocol. [Getting Git on a Server](https://git-scm.com/book/en/v2/ch00/_getting_git_on_a_server) will introduce all of the available options the server can set up to access your Git repository and the pros and cons of each. |
| Shard | 54 (laksa) |
| Root Hash | 7104038400628677254 |
| Unparsed URL | com,git-scm!/book/en/v2/Git-Basics-Getting-a-Git-Repository s443 |