This draft deletes the entire topic.
Examples
-
At the command line, first verify that you have Git installed:
On all operating systems:
git --version
On UNIX-like operating systems:
which git
If nothing is returned, or the command is not recognized, you may have to install Git on your system by downloading and running the installer. See the Git homepage for exceptionally clear and easy installation instructions.
After installing Git, configure your username and email address. Do this before making a commit.
Once Git is installed, navigate to the directory 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, check what files Git will add to your new repository; this step is worth special care:
git status
Review the resulting list of files; you can tell Git which of the files to place into version control (avoid adding files with confidential information such as passwords, or files that just clutter the repo):
git add <file/directory name #1> <file/directory name #2> < ... >
If all files in the list should be shared with everyone who has access to the repository, a single command will add everything in your current directory and its subdirectories:
git add .
This will "stage" all files to be added to version control, preparing them to be committed in your first commit.
For files that you want never under version control, create and populate a file named
.gitignore
before running theadd
command.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 like a save or snapshot of your entire project. You can now push, or upload, it to a remote repository, and later you can jump back to it if necessary.
If you omit the-m
parameter, your default editor will open and you can edit and save the commit message there. -
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:
cd <path where you'd like the clone to create a directory> git clone https://github.com/username/projectname.git
To clone a BitBucket project:
cd <path where you'd like the clone to create a directory> 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 specify a different name of the directory, e.g.
MyFolder
:git clone https://github.com/username/projectname.git MyFolder
Or to clone in the current directory:
git clone https://github.com/username/projectname.git .
Note:
-
When cloning to a specified directory, the directory must be empty or non-existent.
-
You can also use the
ssh
version of the command:git clone [email protected]:username/projectname.git
The
https
version and thessh
version are equivalent. However, some hosting services such as GitHub recommend that you usehttps
rather thanssh
. -
-
-
24Sharing code
To share your code you create a repository on a remote server to which you will copy your local repository.
To minimize 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
. -
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, 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
anduser.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
-
-
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 thehelp
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
-
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
-
If you are using Windows open Git Bash. If you are using Mac or Linux open your Terminal.
Before you generate an SSH key, you can check to see if you have any existing SSH keys.
List the contents of your
~/.ssh
directory:$ ls -al ~/.ssh # Lists all the files in your ~/.ssh directory
Check the directory listing to see if you already have a public SSH key. By default the filenames of the public keys are one of the following:
id_dsa.pub id_ecdsa.pub id_ed25519.pub id_rsa.pub
If you see an existing public and private key pair listed that you would like to use on your Bitbucket, GitHub (or similar) account you can copy the contents of the
id_*.pub
file.If not you can create a new public an private key pair with the following command:
$ ssh-keygen
Press the Enter or Return key to accept the default location. Enter and re-enter a passphrase when prompted, or leave it empty.
Ensure your SSH key is added to the ssh-agent. Start the ssh-agent in the background if it's not already running:
$ eval "$(ssh-agent -s)"
Add you SSH key to the ssh-agent. Notice that you'll need te replace
id_rsa
in the command with the name of your private key file:$ ssh-add ~/.ssh/id_rsa
If you want to change the upstream of an existing repository from HTTPS to SSH you can run the following command:
$ git remote set-url origin ssh://[email protected]:7999/projects/your_project.git
In order to clone a new repository over SSH you can run the following command:
$ git clone ssh://[email protected]:7999/projects/your_project.git
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
Version | Release Date |
---|---|
2.11.1 | 2017-02-02 |
2.11 | 2016-11-29 |
2.10.2 | 2016-10-28 |
2.10 | 2016-09-02 |
2.9 | 2016-06-13 |
2.8 | 2016-03-28 |
2.7 | 2015-10-04 |
2.6 | 2015-09-28 |
2.5 | 2015-07-27 |
2.4 | 2015-04-30 |
2.3 | 2015-02-05 |
2.2 | 2014-11-26 |
2.1 | 2014-08-16 |
2.0 | 2014-05-28 |
1.9 | 2014-02-14 |
1.8.3 | 2013-05-24 |
1.8 | 2012-10-21 |
1.7.10 | 2012-04-06 |
1.7 | 2010-02-13 |
1.6.5 | 2009-10-10 |
1.6.3 | 2009-05-07 |
1.6 | 2008-08-17 |
1.5.3 | 2007-09-02 |
1.5 | 2007-02-14 |
1.4 | 2006-06-10 |
1.3 | 2006-04-18 |
1.2 | 2006-02-12 |
1.1 | 2006-01-08 |
1.0 | 2005-12-21 |
0.99 | 2005-07-11 |
Topic Outline
- Create your first repository, then add and commit files
- Clone a repository
- Sharing code
- Setting your user name and email
- Learning about a command
- Setting up the upstream remote
- Set up SSH for Git
Versions
Sign up or log in
Save edit as a guest
Join Stack Overflow
Using Google
Using Facebook
Using Email and Password
We recognize you from another Stack Exchange Network site!
Join and Save Draft