Git


This draft deletes the entire topic.

expand all collapse all

Examples

  • 33

    At the command line, first verify that you have Git installed:

    On all Operating Systems:

    git --version
    

    On UNIX-like Operating Systems, you can also run this command:

    which git
    

    If nothing is returned, or it complains about the command not being recognized, you may have to install Git on your system by downloading and running the installer. See the Git homepage for installation instructions.

    After installing git, it may be a good time to set up a username and email address: see Setting your username and email for instructions. You'll have to do this before making a commit.

    Once Git is installed, navigate to the directory that you want to place under version control and create an empty Git repository:

    git init
    

    This creates a hidden folder, .git, which contains the plumbing needed for Git to work. Next, tell Git that you want to place all files from the current directory under version control:

    git add .
    

    This will "stage" all files to be added to version control, making them ready to be committed in your maiden commit.

    If you don't want all the files to be added to version control, create a file named .gitignore and edit it before running the add command so that these files will not be included.

    Commit all the files that have been added, along with a commit message:

    git commit -m "initial commit"
    

    This creates a new commit with the given message. A commit is a bit like a save or snapshot of your entire project. You can now push, or upload, it to a repository now, and later, you can jump back to it if necessary.

  • 16

    The git clone command is used to copy an existing Git repository from a server to the local machine.

    For example, to clone a GitHub project:

    git clone https://github.com/username/projectname.git
    

    To clone a Bitbucket project:

    git clone https://[email protected]/username/projectname.git

    This creates a directory called projectname on the local machine, containing all the files in the remote Git repository. This includes source files for the project, as well as a .git sub-directory which contains the entire history and configuration for the project.

    To clone the repository into a specified directory, such as MyFolder:

    git clone https://github.com/username/projectname.git MyFolder
    

    Note:

    1. When cloning to a specified directory, the directory must be empty or non-existent.
    2. You can also use the ssh version of the command:
    git clone [email protected]:username/projectname.git
    

    The https version and the ssh version are equivalent. However, some hosting services such as GitHub recommend that you use https rather than ssh.

  • 10

    You wish to share your code. You first create an accessible repository on a remote server to which you will copy your local repository. To minimise the use of space on the remote server you create a bare repository: one which has only the .git objects and doesn't create a working copy in the filesystem. As a bonus you set this remote as an upstream server to easily share updates with other programmers.

    On the remote server:

    git init --bare /path/to/repo.git
    

    On the local machine:

    git remote add origin ssh://username@server:/path/to/repo.git
    

    (Note that ssh: is just one possible way of accessing the remote repository.)

    Now copy your local repository to the remote:

    git push --set-upstream origin master
    

    Adding --set-upstream (or -u) created an upstream (tracking) reference which is used by argument-less git commands, e.g. git pull.

I am downvoting this example because it is...

Remarks

Git is a free, distributed version control system which allows programmers to keep track of code changes, via "snapshots" (commits), in its current state. Utilizing commits allows programmers to test, debug, and create new features collaboratively. All commits are kept in what is known as a "Git Repository" that can be hosted on your computer, private servers, or open source websites, such at Github.

Git also allows for users to create new "branches" of the code, which allows different versions of the code to live alongside each other. This enables scenarios where one branch contains the most recent stable version, a different branch contains a set of new features being developed, and a yet another branch contains a different set of features. Git makes the process of creating these branches, and then subsequently merging them back together, nearly painless.

Git was originally created for managing the Linux kernel source. By making them easier, it encourages small commits, forking of projects and merging between forks, and having lots of short-lived branches.

The biggest change for people who are used to CVS or Subversion is that every checkout contains not only the source tree, but also the whole history of the project. Common operations like diffing of revisions, checking out older revisions, committing (to your local history), creating a branch, checking out a different branch, merging branches or patch files can all be done locally without having to communicate with a central server. Thus the biggest source of latency and unreliability is removed. Communicating with the "upstream" repository is only needed to get the latest changes, and to publish your local changes to other developers. This turns what was previously a technical constraint (whoever has the repository owns the project) into an organisational choice (your "upstream" is whomever you choose to sync with).

Versions

VersionRelease Date
2.92016-06-13
2.82016-03-28
2.72015-10-04
2.62015-09-28
2.52015-07-27
2.42015-04-30
2.32015-02-05
2.22014-11-26
2.12014-08-16
2.02014-05-28
1.92014-02-14
1.8.32013-05-24
1.82012-10-21
1.7.102012-04-06
1.72010-02-13
1.6.52009-10-10
1.6.32009-05-07
1.62008-08-17
1.5.32007-09-02
1.52007-02-14
1.42006-06-10
1.32006-04-18
1.22006-02-12
1.12006-01-08
1.02005-12-21
0.992005-07-11
Still have a question about Getting started with Git? Ask Question

Create your first repository, then add and commit files

33

At the command line, first verify that you have Git installed:

On all Operating Systems:

git --version

On UNIX-like Operating Systems, you can also run this command:

which git

If nothing is returned, or it complains about the command not being recognized, you may have to install Git on your system by downloading and running the installer. See the Git homepage for installation instructions.

After installing git, it may be a good time to set up a username and email address: see Setting your username and email for instructions. You'll have to do this before making a commit.

Once Git is installed, navigate to the directory that you want to place under version control and create an empty Git repository:

git init

This creates a hidden folder, .git, which contains the plumbing needed for Git to work. Next, tell Git that you want to place all files from the current directory under version control:

git add .

This will "stage" all files to be added to version control, making them ready to be committed in your maiden commit.

If you don't want all the files to be added to version control, create a file named .gitignore and edit it before running the add command so that these files will not be included.

Commit all the files that have been added, along with a commit message:

git commit -m "initial commit"

This creates a new commit with the given message. A commit is a bit like a save or snapshot of your entire project. You can now push, or upload, it to a repository now, and later, you can jump back to it if necessary.

Clone a repository

16

The git clone command is used to copy an existing Git repository from a server to the local machine.

For example, to clone a GitHub project:

git clone https://github.com/username/projectname.git

To clone a Bitbucket project:

git clone https://[email protected]/username/projectname.git

This creates a directory called projectname on the local machine, containing all the files in the remote Git repository. This includes source files for the project, as well as a .git sub-directory which contains the entire history and configuration for the project.

To clone the repository into a specified directory, such as MyFolder:

git clone https://github.com/username/projectname.git MyFolder

Note:

  1. When cloning to a specified directory, the directory must be empty or non-existent.
  2. You can also use the ssh version of the command:
git clone [email protected]:username/projectname.git

The https version and the ssh version are equivalent. However, some hosting services such as GitHub recommend that you use https rather than ssh.

Sharing code

10

You wish to share your code. You first create an accessible repository on a remote server to which you will copy your local repository. To minimise the use of space on the remote server you create a bare repository: one which has only the .git objects and doesn't create a working copy in the filesystem. As a bonus you set this remote as an upstream server to easily share updates with other programmers.

On the remote server:

git init --bare /path/to/repo.git

On the local machine:

git remote add origin ssh://username@server:/path/to/repo.git

(Note that ssh: is just one possible way of accessing the remote repository.)

Now copy your local repository to the remote:

git push --set-upstream origin master

Adding --set-upstream (or -u) created an upstream (tracking) reference which is used by argument-less git commands, e.g. git pull.

Learning about a command

6

To get more information about any git command – i.e. details about what the command does, available options and other documentation – use the --help option or the help command.

For example, to get all available information about the git diff command, use:

git diff --help
git help diff

Similarly, to get all available information about the status command, use:

git status --help
git help status

If you only want a quick help showing you the meaning of the most used command line flags, use -h:

git checkout -h

Setting your user name and email

6

You need to set who you are before creating any commit.
That will allow commits to have the right author name and email associated to them.

It has nothing to do with authentication when pushing to a remote repository
(e.g. when pushing to a remote repository using your GitHub or BitBucket or GitLab account)

To declare that identity for all repositories, use git config --global
This will store the setting in your user's .gitconfig file: e.g. $HOME/.gitconfig or for Windows, %USERPROFILE%\.gitconfig.

git config --global user.name "Your Name"
git config --global user.email [email protected]

To declare an identity for a single repository, use git config inside a repo.
This will store the setting inside the individual repositry, in the file $GIT_DIR/config. e.g. /path/to/your/repo/.git/config.

cd /path/to/my/repo
git config user.name "Your Login At Work"
git config user.email [email protected]

Settings stored in a repositorie's config file will take precedence over the global config when you use that repository.


Tips: if you have different identities (one for open-source project, one at work, one for private repos, ...), and you don't want to forget to set the right one for each different repos you are working on:

  • Remove a global identity

      git config --global --remove-section user.name
      git config --global --remove-section user.email
    
2.8
  • To force git to look for your identity only within a repository's settings, not in the global config:

      git config --global user.useConfigOnly true
    

That way, if you forget to set your user.name and user.email for a given repository and try to make a commit, you will see:

no name was given and auto-detection is disabled
no email was given and auto-detection is disabled

Setting up the upstream remote

5

If you have cloned a fork (e.g. an open source project on Github) you may not have push access to the upstream repository, so you need both your fork but be able to fetch the upstream repository.

First check the remote names:

$ git remote -v
origin    https://github.com/myusername/repo.git (fetch)
origin    https://github.com/myusername/repo.git (push)
upstream  # this line may or may not be here

If upstream is there already (it is on some git versions) you need to set the url (currently it's empty):

$ git remote set-url upstream https://github.com/projectusername/repo.git

If the upstream is NOT there, or if you also want to add a friend/colleague's fork (currently they do not exist):

$ git remote add upstream https://github.com/projectusername/repo.git
$ git remote add dave https://github.com/dave/repo.git

Topic Outline