首页 > 代码库 > GitHub 教程【转】

GitHub 教程【转】

<style type="text/css" isprelink="true">@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);</style><style type="text/css">@import url(/css/cuteeditor.css);</style><style type="text/css" isprelink="true">@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);</style><style type="text/css">@import url(/css/cuteeditor.css);</style>


Table of Contents

·             1 Git详细教程

o  1.1 Git简介

§ 1.1.1 Git是何方神圣?

§ 1.1.2 重要的术语

§ 1.1.3 索引

o  1.2 Git安装

o  1.3 Git配置

§ 1.3.1 用户信息

§ 1.3.2 高亮显示

§ 1.3.3 忽略特定的文件

§  1.3.4 使用.gitkeep来追踪空的文件夹

o  1.4 开始操作Git

§ 1.4.1 创建内容

§  1.4.2 创建仓库添加文件和提交更改

§ 1.4.3 diff命令与commit更改

§ 1.4.4Status, Diff Commit Log

§ 1.4.5 更正提交的信息 - git amend

§ 1.4.6 删除文件

o  1.5 远端仓库remote repositories

§  1.5.1 设置一个远端的Git仓库

§ 1.5.2 推送更改到其他的仓库

§ 1.5.3 添加远端仓库

§ 1.5.4 显示已有的远端仓库

§ 1.5.5 克隆仓库

§ 1.5.6 拉取Pull更改

§ 1.5.7 还原更改

§ 1.5.8 标记

o  1.6 分支合并

§ 1.6.1 分支

§ 1.6.2 合并

§ 1.6.3 删除分支

§  1.6.4 推送push一个分支到远端仓库

o  1.7 解决合并冲突

o  1.8 变基Rebase

§ 1.8.1 在同一分支中应用RebaseCommit

§ 1.8.2Rebasing多个分支

§ 1.8.3Rebase最佳实践

§ 1.8.4 创建和应用补丁

o  1.9 定义同名命令

o  1.10 放弃跟踪文件

o  1.11 其他有用的命令

o  1.12 安装Git服务

o  1.13 在线的远端仓库

§ 1.13.1 克隆远端仓库

§ 1.13.2 添加远端仓库

§ 1.13.3 通过http和代理服务器进行远端操作

o  1.14 Git服务提供商

§ 1.14.1GitHub

§ 1.14.2Bitbucket

o  1.15 Git的图形接口

o  1.16Kindle版本教程

o  1.17 问题与讨论

o  1.18 链接和文章

 

1 Git详细教程

1.1 Git简介

1.1.1 Git是何方神圣?

 

Git是用C语言开发的分布版本控制系统版本控制系统可以保留一个文件集合的历史记录并能回滚文件集合到另一个状态历史记录状态)。另一个状态可以是不同的文件也可以是不同的文件内容举个例子你可以将文件集合转换到两天之前的状态或者你可以在生产代码和实验性质的代码之间进行切换文件集合往往被称作是源代码在一个分布版本控制系统中每个人都有一份完整的源代码包括源代码所有的历史记录信息),而且可以对这个本地的数据进行操作分布版本控制系统不需要一个集中式的代码仓库

 

当你对本地的源代码进行了修改你可以标注他们跟下一个版本相关将他们加到index),然后提交到仓库中来commit)。Git保存了所有的版本信息所以你可以转换你的源代码到任何的历史版本你可以对本地的仓库进行代码的提交然后与其他的仓库进行同步你可以使用Git来进行仓库的克隆clone操作完整的复制一个已有的仓库仓库的所有者可以通过push操作推送变更到别处的仓库或者Pull操作从别处的仓库拉取变更来同步变更

 

Git支持分支功能branch)。如果你想开发一个新的产品功能你可以建立一个分支对这个分支的进行修改而不至于会影响到主支上的代码

 

Git提供了命令行工具这个教程会使用命令行你也可以找到图形工具譬如与Eclipse配套的EGit工具但是这些都不会在这个教程中进行描述


 

1.1.2 重要的术语

 

Git 术语

术语

定义

仓库

Repository

 

一个仓库包括了所有的版本信息所有的分支和标记信息. Git中仓库的每份拷贝都是完整的仓库让你可以从中取得你的工作副本

 

分支

Branches

 

一个分支意味着一个独立的拥有自己历史信息的代码线code line)。你可以从已有的代码中生成一个新的分支这个分支与剩余的分支完全独立默认的分支往往是叫master用户可以选择一个分支选择一个分支叫做checkout.

标记

Tags

 

一个标记指的是某个分支某个特定时间点的状态通过标可以很方便的切换到标记时的状态例如2009125号在testing分支上的代码状态

提交

Commit

 

提交代码后仓库会创建一个新的版本这个版本可以在后续被重新获得每次提交都包括作者和提交者作者和提交者可以是不同的人

URL

 

URl用来标识一个仓库的位置用来表示代码的一个版本状态

修订

Revision

 

Git通过用SHA1 hash算法表示的id来标识不同的版本每一个 SHA1 id都是160位长

,16进制标识的字符串.最新的版本可以通过HEAD来获取.之前的版本可以通过"HEAD~1"来获取以此类推


 

1.1.3 索引

 

Git 需要将代码的变化显示的与下一次提交进行关联举个例子如果你对一个文件继续了修改然后想将这些修改提交到下一次提交中你必须将这个文件提交到索引中通过git add file命令这样索引可以保存所有变化的快照

 

新增的文件总是要显示的添加到索引中来对于那些之前已经提交过的文件可以在commit命令中使用-a 选项达到提交到索引的目的

 

1.2 Git安装

 

Ubuntu你可以通过apt来安装git命令行工具

 

sudo apt-get install git-core

 

对于其他的Linux版本请查看相关的软件包安装工具使用方法msysgit项目提供了Windows版本的Git地址是http://code.google.com/p/msysgit/


 

1.3 Git配置

 

你可以在.gitconfig文件中防止git的全局配置文件位于用户的home目录上述已经提到每次提交都会保存作者和提交者的信息这些信息都可以保存在全局配置中后续将会介绍配置用户信息高亮显示和忽略特定的文件

 

1.3.1 用户信息

 

通过如下命令来配置用户名和Email

git config --global user.name "Example Surname"

 

git config --global user.email"your.email@gmail.com"

# Set default so that all changes are always pushed tothe repository

git config --global push.default "matching"

 

获取Git配置信息执行以下命令

git config --list


 

1.3.2 高亮显示

以下命令会为终端配置高亮

git config --global color.status auto

git config --global color.branch auto


 

1.3.3 忽略特定的文件

可以配置Git忽略特定的文件或者是文件夹这些配置都放在.gitignore文件中这个文件可以存在于不同的文件夹中可以包含不同的文件匹配模式为了让Git忽略bin文件夹在主目录下放置.gitignore文件其中内容为bin

同时Git也提供了全局的配置core.excludesfile


 

1.3.4 使用.gitkeep来追踪空的文件夹

Git会忽略空的文件夹如果你想版本控制包括空文件夹根据惯例会在空文件夹下放置.gitkeep文件其实对文件名没有特定的要求一旦一个空文件夹下有文件后这个文件夹就会在版本控制范围内


 

1.4 开始操作Git

后续将通过一个典型的Git工作流来学习在这个过程中你会创建一些文件创建一个本地的Git仓库提交你的文件到这个仓库中这之后你会克隆一个仓库在仓库之间通过pullpush操作来交换代码的修改注释#开头解释了命令的具体含义让我们打开命令行开始操作吧


 

1.4.1 创建内容

下面创建一些文件它们会被放到版本控制之中

#Switch to home

cd ~/

# Create a directory

mkdir ~/repo01

# Switch into it

cd repo01

# Create a new directory

mkdir datafiles

# Create a few files

touch test01

touch test02

touch test03

touch datafiles/data.txt

# Put a little text into the first file

ls >test01


 

1.4.2 创建仓库添加文件和提交更改

每个Git仓库都是放置在.git文件夹下.这个目录包含了仓库的所有历史记录.git/config文件包含了仓库的本地配置

以下将会创建一个Git仓库添加文件倒仓库的索引中提交更改

# Initialize the local Git repository

git init

# Add all (files and directories) to theGit repository

git add .

# Make a commit of your file to the localrepository

git commit -m "Initialcommit"

# Show the log file

git log


 

1.4.3 diff命令与commit更改

通过git diff命令用户可以查看更改通过改变一个文件的内容看看gitdiff命令输出什么然后提交这个更改到仓库中

# Make some changes to the file

echo "This is achange" > test01

echo "and thisis another change" > test02

 

# Check the changes via the diff command

git diff

 

# Commit the changes, -a will commitchanges for modified files

# but will not add automatically new files

git commit -a -m "Theseare new changes"


 

1.4.4 Status, Diff Commit Log

下面会向你展示仓库现有的状态以及过往的提交历史

# Make some changes in the file

echo "This is anew change" > test01

echo "and thisis another new change" > test02

 

# See the current status of your repository

# (which files are changed / new / deleted)

git status

# Show the differences between theuncommitted files

# and the last commit in the current branch

git diff

 

# Add the changes to the index and commit

git add . && git commit -m "More chaanges - typo in the commitmessage"

 

# Show the history of commits in thecurrent branch

git log

# This starts a nice graphical view of thechanges  (在OS X中没有发现命令gitk

gitk --all


 

1.4.5 更正提交的信息 - git amend

通过git amend命令我们可以修改最后提交的的信息上述的提交信息中存在错误下面会修改这个错误。(修改的是最后一次commitcomments可以用两次git log 看出差异

git commit --amend -m "More changes - nowcorrect"


 

1.4.6 删除文件

如果你删除了一个在版本控制之下的文件那么使用git add .不会在索引中删除这个文件需要通过带-a选项的git commit命令和-A选项的git add命令来完成

# Create a file and put it under versioncontrol

touch nonsense.txt

git add . && git commit -m "a new file has been created"

# Remove the file

rm nonsense.txt

# Try standard way of committing -> willnot work

git add . && git commit -m "a new file has been created"

# Now commit with the -a flag

git commit -a -m "Filenonsense.txt is now removed"

# Alternatively you could add deleted filesto the staging index via

git add -A .

git commit -m "Filenonsense.txt is now removed"


 

1.5 远端仓库remote repositories


 

1.5.1 设置一个远端的Git仓库

 

我们将创建一个远端的Git仓库这个仓库可以存储在本地或者是网络上

 

远端Git仓库和标准的Git仓库有如下差别一个标准的Git仓库包括了源代码和历史信息记录我们可以直接在这个基础上修改代码因为它已经包含了一个工作副本但是远端仓库没有包括工作副本只包括了历史信息可以使用–bare选项来创建一个这样的仓库

 

为了方便起见示例中的仓库创建在本地文件系统上

# Switch to the first repository

cd ~/repo01

# 在当前工作目录的上一层建立一个远端仓库 remote-repository.git

git clone --bare . ../remote-repository.git

 

# Check the content, it is identical to the.git directory in repo01

ls ~/remote-repository.git


 

1.5.2 推送更改到其他的仓库

 

做一些更改然后将这些更改从你的第一个仓库推送到一个远端仓库 

 

cd ~/repo01

echo "Hello, hello.Turn your radio on" > test01echo "Bye, bye. Turn your radiooff" > test02

git commit -a -m"Some changes"

需要设置

git config --global push.default simple

git push --set-upstream../remote-repository.git master

git push../remote-repository.git

 

1.5.3 添加远端仓库

 

除了通过完整的URL来访问Git仓库外还可以通过git remote add命令为仓库添加一个短名称当你克隆了一个仓库以后origin表示所克隆的原始仓库即使我们从零开始这个名称也存在

 

# Add../remote-repository.git with the name origin

git remote add origin ../remote-repository.git

 

# Again some changes

echo "I added aremote repo" > test02

# Commit

git commit -a -m "Thisis a test for the new remote origin"

# If you do not label a repository it willpush to origin

git push origin


 

1.5.4 显示已有的远端仓库

 

通过以下命令查看已经存在的远端仓库

# Show the existing defined remote repositories

git remote


 

1.5.5 克隆仓库

通过以下命令在新的目录下创建一个新的仓库

# Switch to home

cd ~

# Make new directory

mkdir repo02

 

# Switch to new directory

 

cd ~/repo02

# Clone

git clone ../remote-repository.git .


 

1.5.6 拉取Pull更改

通过拉取可以从其他的仓库中获取最新的更改在第二个仓库中做一些更改然后将更改推送到远端的仓库中然后第一个仓库拉取这些更改

# Switch to home

cd ~

 

# Switch to second directory

cd ~/repo02

# Make changes

echo "Achange" > test01

# Commit

git commit -a -m "Achange"

# Push changes to remote repository

# Origin is automatically maintained as wecloned from this repository

git push origin

# Switch to the first repository and pullin the changes

cd ~/repo01

git pull ../remote-repository.git/

# Check the changes

less test01


 

1.5.7 还原更改

如果在你的工作副本中你创建了不想被提交的文件你可以丢弃它

# Create a new file with content

touch test04

echo "this is trash" > test04

 

# Make a dry-run to see what would happen

# -n is the same as --dry-run

git clean -n

 

# Now delete

git clean -f

 

你可以提取老版本的代码,通过提交的IDgit log命令可以查看提交ID

 

# Switch to home

cd ~/repo01

# Get the log

git log

 

# Copy one of the older commits and checkout the olderrevision via  译者注:checkout 后加commit id就是把commit的内容复制到index和工作副本中

git checkout commit_name

 

如果你还未把更改加入到索引中你也可以直接还原所有的更改

#Some nonsense change

echo "nonsensechange" > test01

# Not added to the staging index. Thereforewe can

# just checkout the old version

#译者注:checkout后如果没有commit id号,就是从index中拷贝数据到工作副本,不涉及commit部分的改变

git checkout test01

# Check the result

cat test01

# Another nonsense change

echo "anothernonsense change" > test01

# We add the file to the staging index

git add test01

# Restore the file in the staging index

#译者注:复制HEAD所指committest01文件到index

git reset HEAD test01

# Get the old version from the stagingindex

#译者注:复制indextest01到工作副本中

git checkout test01

#译者注,以上两条命令可以合并为git checkout HEAD test01

 

也可以通过revert命令进行还原操作

 

# Revert a commit

git revert commit_name

 

即使你删除了一个未添加到索引和提交的文件你也可以还原出这个文件

# Delete a file

rm test01

# Revert the deletion

git checkout test01

 

如果你已经添加一个文件到索引中但是未提交可以通过git resetfile 命令将这个文件从索引中删除

// Create a file

touch incorrect.txt

// Accidently add it to the index

git add .

// Remove it from the index

git reset incorrect.txt

// Delete the file

rm incorrect.txt

 

如果你删除了文件夹且尚未提交可以通过以下命令来恢复这个文件夹 译者注即使已经提交也可以还原

git checkout HEAD -- your_dir_to_restore

 

译者注checkoutreset这两个命令的含义是不同的可以参阅这篇文章http://marklodato.github.com/visual-git-guide/index-en.html


 

1.5.8 标记

Git可以使用对历史记录中的任一版本进行标记这样在后续的版本中就能轻松的找到一般来说被用来标记某个发行的版本可以通过git tag命令列出所有的标记通过如下命令来创建一个标记和恢复到一个标记

git tag version1.6 -m ‘version 1.6‘     

git checkout <tag_name>


 

1.6 分支合并

 

1.6.1 分支

 

通过分支可以创造独立的代码副本默认的分支叫masterGit消耗很少的资源就能创建分支Git鼓励开发人员多使用分支

 

下面的命令列出了所有的本地分支当前所在的分支前带有*

git branch

 

如果你还想看到远端仓库的分支可以使用下面的命令

git branch -a

 

可以通过下面的命令来创建一个新的分支

# Syntax: git branch <name> <hash>

# <hash> in the above is optional

# if not specified the last commit will be used

# If specified the corresponding commit will be used

git branch testing

# Switch to your new branch

git checkout testing

# Some changes

echo "Cool new feature in this branch" >test01

git commit -a -m "new feature"

# Switch to the master branch

git checkout master

# Check that the content of test01 is the old one

cat test01


 

1.6.2 合并

 

通过Merge我们可以合并两个不同分支的结果Merge通过所谓的三路合并来完成分别来自两个分支的最新commit和两个分支的最新公共commit.可以通过如下的命令进行合并

# Syntax: git merge <branch-name>

git merge testing

 

一旦合并发生了冲突Git会标志出来开发人员需要手工的去解决这些冲突解决冲突以后就可以将文件添加到索引中然后提交更改


 

1.6.3 删除分支

 

删除分支的命令如下

#Delete branch testing

git branch -d testing

# Check if branch has been deleted

git branch


 

1.6.4 推送push一个分支到远端仓库

 

默认的Git只会推送匹配的分支的远端仓库这意味在使用git push命令默认推送你的分支之前需要手工的推送一次这个分支

# Push testing branch to remote repository

git push origin testing

 

# Switch to the testing branch

git checkout testing

 

# Some changes

echo "News for you" > test01

git commit -a -m "new feature in branch"

 

# Push all including branch

git push

通过这种方式你可以确定哪些分支对于其他仓库是可见的而哪些只是本地的分支


 

1.7 解决合并冲突

 

如果两个不同的开发人员对同一个文件进行了修改那么合并冲突就会发生Git没有智能到自动解决合并两个修改

 

在这一节中我们会首先制造一个合并冲突然后解决它并应用到Git仓库中

 

下面会产生一个合并冲突

 

# Switch to the first directory

cd ~/repo01

# Make changes

touch mergeconflict.txt

echo "Change in the first repository" >mergeconflict.txt

# Stage and commit

git add . && git commit -a -m "Will createmerge conflict 1"

 

# Switch to the second directory

cd ~/repo02

# Make changes

touch mergeconflict.txt

echo "Change in the second repository" >mergeconflict.txt

# Stage and commit

git add . && git commit -a -m "Will createmerge conflict 2"

# Push to the master repository

git push

 

# Now try to push from the first directory

# Switch to the first directory

cd ~/repo01

# Try to push --> you will get an error message

git push

# Get the changes

git pull origin master

 

Git将冲突放在收到影响的文件中文件内容如下

<<<<<<< HEAD

Change in the first repository

=======

Change in the second repository

>>>>>>>b29196692f5ebfd10d8a9ca1911c8b08127c85f8

 

上面部分是你的本地仓库下面部分是远端仓库现在编辑这个文件然后commit更改另外的你可以使用git mergetool命令

# Either edit the file manually or use

git mergetool

# You will be prompted to select which merge tool youwant to use

# For example on Ubuntu you can use the tool"meld"

# After  mergingthe changes manually, commit them

git commit -m "merged changes"


 

1.8 变基Rebase

 

1.8.1 在同一分支中应用Rebase Commit

 

通过rebase命令可以合并多个commit为一个这样用户push更改到远端仓库的时候就可以先修改commit历史

 

接下来我们将创建多个commit然后再将它们rebase成一个commit

 

# Create a new file

touch rebase.txt

 

# Add it to git

git add . && git commit -m "rebase.txt addedto index"

 

# Do some silly changes and commit

echo "content" >> rebase.txt

git add . && git commit -m "addedcontent"

echo " more content" >> rebase.txt

git add . && git commit -m "added morecontent"

echo " more content" >> rebase.txt

git add . && git commit -m "added morecontent"

echo " more content" >> rebase.txt

git add . && git commit -m "added morecontent"

echo " more content" >> rebase.txt

git add . && git commit -m "added morecontent"

echo " more content" >> rebase.txt

git add . && git commit -m "added morecontent"

 

# Check the git log message

git log

我们合并最后的七个commit你可以通过如下的命令交互的完成

git rebase -i HEAD~7

这个命令会打开编辑器让你修改commit的信息或者 squash/ fixup最后一个信息.Squash会合并commit信息而fixup会忽略commit信息待理解

1.8.2 Rebasing多个分支

你也可以对两个分支进行rebase操作如下所述merge命令合并两个分支的更改rebase命令为一个分支的更改生成一个补丁然后应用这个补丁到另一分支中

使用mergerebase最后的源代码是一样的但是使用rebase产生的commit历史更加的少而且历史记录看上去更加的线性

# Create new branch

git branch testing

# Checkout the branch

git checkout testing

# Make some changes

echo "This will be rebased to master" >test01

# Commit into testing branch

git commit -a -m "New feature in branch"

# Rebase the master

git rebase master


 

1.8.3 Rebase最佳实践

push更改到其他的Git仓库之前我们需要仔细检查本地分支的commit历史

 

Git你可以使用本地的commit开发人员可以利用这个功能方便的回滚本地的开发历史但是在push之前需要观察你的本地分支历史是否其中有些commit历史对其他用户来说是无关的

 

如果所有的commit历史都跟同一个功能有关很多情况下你需要rebase这些commit历史为一个commit历史

 

交互性的rebase主要就是做重写commit历史的任务这样做是安全的因为commit还没有被push到其它的仓库这意味着commit历史只有在被push之前被修改

 

如果你修改然后push了一个已经在目标仓库中存在的commit历史这看起来就像是你实现了一些别人已经实现的功能


 

1.8.4 创建和应用补丁

 

一个补丁指的是一个包含对源代码进行修改的文本文件你可以将这个文件发送给某人然后他就可以应用这个补丁到他的本地仓库

 

下面会创建一个分支对这个分支所一些修改然后创建一个补丁并应用这个补丁到master分支

 

# Create a new branch

git branch mybranch

# Use this new branch

git checkout mybranch

# Make some changes

touch test05

# Change some content in an existing file

echo "New content for test01" >test01

# Commit this to the branch

git add .

git commit -a -m "First commit in the branch"

 

# Create a patch --> git format-patch master

git format-patch origin/master

# This created patch0001-First-commit-in-the-branch.patch

 

# Switch to the master

git checkout master

 

# Apply the patch

git apply 0001-First-commit-in-the-branch.patch

# Do your normal commit in the master

git add .

git commit -a -m "Applied patch"

 

# Delete the patch

rm 0001-First-commit-in-the-branch.patch

 


 

1.9 定义同名命令

 

Git允许你设定你自己的Git命令你可以给你自己常用的命令起一个缩写命令或者合并几条命令道一个命令上来

 

下面的例子中定义了git add-commit 命令这个命令合并了git add . -A git commit -m 命令定义这个命令后就可以使用git add-commit -m"message" .

 

git config --global alias.add-commit ‘!git add . -A&& git commit‘

但是非常不幸截止写这篇文章之前定义同名命令在msysGit中还没有支持同名命令不能以开始


 

1.10 放弃跟踪文件

 

有时候你不希望某些文件或者文件夹被包含在Git仓库中但是如果你把它们加到.gitignore文件中以后Git会停止跟踪这个文件但是它不会将这个文件从仓库中删除这导致了文件或者文件夹的最后一个版本还是存在于仓库中为了取消跟踪这些文件或者文件夹你可以使用如下的命令

 

# Remove directory .metadata from git repo

git rm -r --cached .metadata

# Remove file test.txt from repo

git rm --cached test.txt

这样做不会将这些文件从commit历史中去掉如果你想将这些文件从commit历史中去掉可以参考git filter-branch命令


 

1.11 其他有用的命令

 

下面列出了在日常工作中非常有用的Git命令

 

有用的Git命令

 

命令

描述

git blame filename

谁创建了或者是修改了这个文件

git checkout -b mybranch

以上上个commit信息为起点创建一条

master~1

新的分支


 

1.12 安装Git服务

 

如上所述我们的操作不需要Git服务我可以只使用文件系统或者是Git仓库的提供者GithubBitbucket但是有时候拥有一个自己的服务是比较方便的ubuntu下安装一个服务相对来说是比较容易的

 

确定你已经安装了ssh

apt-get install ssh

 

如果你还没有安装Git服务安装它

sudo apt-get install git-core

 

添加一个名为git的用户

sudo adduser git

 

然后使用git用户进行登陆创建一个空的仓库

# Login to server

# to test use localhost

ssh git@IP_ADDRESS_OF_SERVER

 

# Create repository

git init --bare example.git

 

现在你就可以向远端的仓库提交变更了

mkdir gitexample

cd gitexample

git init

touch README

git add README

git commit -m ‘first commit‘

git remote add origingit@IP_ADDRESS_OF_SERVER:example.git

git push origin master


 

1.13 在线的远端仓库

 

1.13.1 克隆远端仓库

 

Git支持远端的操作Git支持多种的传输类型Git自带的协议就叫做git下面的的命令通过git协议从克隆一个仓库

git clone git@github.com:vogella/gitbook.git

 

同样的你可以通过http协议来克隆仓库

# The following will clone via HTTP

git clone http://vogella@github.com/vogella/gitbook.git


 

1.13.2 添加远端仓库

如果你克隆了一个远端仓库那么原先的仓库就叫做origin

你可以push修改到origin通过 git push origin 命令. 当然push到一个远端的仓库需要对仓库的写权限

你可以通过git remote add name gitrepo 命令添加多个仓库例如你可以通过http协议再次添加之前clone过来的仓库:

// Add the https protocol

git remote add githttphttps://vogella@github.com/vogella/gitbook.git


 

1.13.3 通过http和代理服务器进行远端操作

如果你的防火墙屏蔽了出http以外的所有协议那么使用http协议来获取仓库是非常好的方法.

Git同样支持通过代理服务器使用http协议下面的Git命令会展示这一点你可以为所有的程序设置代理服务器或者只是为Git服务提供

下面的例子用到了环境变量

# Linux

export http_proxy=http://proxy:8080

# On Windows

# Set http_proxy=http://proxy:8080

git clonehttp://dev.eclipse.org/git/org.eclipse.jface/org.eclipse.jface.snippets.git

# Push back to the origin using http

git push origin

 

下面的例子只是用到了Git的配置

// Set proxy for git globally

 git config--global http.proxy http://proxy:8080

// To check the proxy settings

git config --get http.proxy

// Just in case you need to you can also revoke the proxysettings

git config --global --unset http.proxy


 

1.14 Git服务提供商

除了假设自己的服务你也可以使用Git服务提供商提供的服务最流行的Git服务提供网站是GitHubBitbucket它们都提供了有限制的免费服务


 

1.14.1 GitHub

可以通过 https://github.com/ 访问GitHub. GitHub上所有的公开仓库都是免费的如果你想在上面使用私有的仓库那么就需要付费给GitHub

 

GitHub需要你创建ssh的公钥私钥生成一份Ubuntu的公钥私钥可以访问 sshkey creation inUbuntu Windows环境可以访问msysgit ssh key generation.

 

GitHub上创建一个账户和一个仓库以后你会收到如何将你的项目上传到GitHUb的指南其中的命令大致如下

 

Global setup:

 Set up git

  git config--global user.name "Your Name"

  git config--global user.email your.email@gmail.com

     

Next steps:

  mkdir gitbook

  cd gitbook

  git init

  touch README

  git add README

  git commit -m‘first commit‘

  git remote addorigin git@github.com:vogella/gitbook.git

  git push -uorigin master

     

Existing Git Repo?

  cdexisting_git_repo

  git remote addorigin git@github.com:vogella/gitbook.git

  git push -uorigin master


 

1.14.2 Bitbucket

 

可以通过 https://bitbucket.org/ 访问Bitbucket. Bitbucket 提供了无限制了公共仓库和只能有五个人访问的私有仓库如果你需要超过五个人访问私有仓库就需要付费给Bitbucket


 

1.15 Git的图形接口

 

这个教程主要说明Git命令行的使用完成了这个教程以后你可能想要找到一个Git的图形工具

 

Git提供了两个图形工具 gitk能够展示仓库的历史信息git gui 让你可以通过编辑器来完成Git操作

 

Eclipse EGit 项目提供了GitEclipse的集成在最新的Eclipse版本中可以找到

 

1.16 Kindle版本教程

 

这个教程提供了Kindle版本

Kindle Edition


 

1.17 问题与讨论

 

在提出问题之前请先查看 vogella FAQ. 如果你有任何的问题或者是从文章中找到错误那么可以使用www.vogella.com Google Group. 我自己写了一个简短的列表 how to create good questions 可能会对你有用.

 

1.18 链接和文章

1.Git相关学习资源

 

Git homepage

EGit - Teamprovider forEclipse

Video with LinusTorwalds on Git

Progit book - Free Gitbook

Video casts about Git

http://code.google.com/p/msysgit/ Git on Windows

http://github.com/guides/git-cheat-sheet Git Cheat Sheets

 

 

 

Author: hic<lishuo.os.ds@gmail.com>

Date: 2012-08-26

HTML generated byorg-mode 6.33x in emacs 23

 

来源

http://blog.csdn.net/tangbin330/article/details/9128765

GitHub 教程【转】