5 $ git clone https://gitee.com/用户个性地址/HelloGitee.git
\r
6 $ git config --global user.name "你的名字或昵称"
\r
7 $ git config --global user.email "你的邮箱"
\r
9 $ git add . #将当前目录所有文件添加到git暂存区
\r
10 $ git commit -m "my first commit" #提交并备注提交信息
\r
11 $ git push origin master #将本地提交推送到远程仓库
\r
16 $ git remote add origin https://gitee.com/用户个性地址/HelloGitee.git
\r
17 $ git pull origin master
\r
19 $ git commit -m "第一次提交"
\r
20 $ git push origin master
\r
21 $ git push origin master -f
\r
22 $ git push origin master
\r
30 git是一个程序版本关联软件。与传统的cvs和svn不同的是,git是一个分布式的版本管理软件,可对多个源码库进行代码的使用或管理。
\r
34 @ 已有软件包的部分代码修改,递交给container进行bug修复,功能添加。
\r
35 @ 基于已有软件包,创建一个软件包的分支,或基于该软件包的一个新软件包。
\r
37 @ 安装git-client软件,并初始化一个git目录。
\r
38 @ 下载一个已有软件包的源码,并非clone一个软件包。
\r
39 @ 使用一个git-server进行代码管理。
\r
40 @ 新建一个软件包代码库。本机新建一个目录,用于git-server上的代码库的共享和同步,并添加一个软件包模板文件,编译,distclean之后,commit到本机代码库,再push到git-server。
\r
41 @ 在另一台计算机或另一个目录,从git-server上clone一份代码,进行编译,添加功能代码后,commit并push到git-server。
\r
42 @ 在原有目录中pull代码到本机,并进行代码merge,再进行代码编译。
\r
43 @ 两个目录下的代码修改同一个源文件,在merge时产生的conflect处理。
\r
44 @ 创建代码tag,用于对于代码创建分支前的标记。
\r
45 @ 再新建一个目录,并创建一个软件包的分支。修改单个文件,commit并push到分支,同时将修改的代码merge到主分支,并编译。
\r
46 @ 在主分支和新建的分支同时编写代码,将新建的分支代码merge到主分支,编译。删除用于功能扩展的分支。
\r
47 这里罗列的是单个代码库的多人开发,以及其它用户下载、使用代码的操作。对于新建分支到另一个代码库,对个人以及中小规模的软件开发不常用,不进行介绍。
\r
65 在ubuntu下,git客户端软件的安装只需单个命令行命令.
\r
66 $ sudo apt-get install git
\r
69 通常使用git用于下载代码,并编译程序使用.相比与clone一个git的project,下载代码只下载代码,而clone一个project是将代码的所有修改信息都下载到本机,占用的流量和存储空间都比较大.
\r
71 $ git remote https://github.com/xxx/ABC.git
\r
72 $ git checkout master
\r
76 这里的git-server并不是指自己搭建的git服务器,而是提供git服务的网站的申请.较常用的git代码管理网站有:
\r
82 @ savannah.nongnu.org
\r
86 一个project的代码最初是从一个空白的project或其它project代码修改而来的.在git上使用,需要先新建一个project,并进行代码的修改和递交.
\r
90 traced表示文件在某个git库中的一种状态.文件traced,表示git对该文件进行trace(管理),文件的修改,在git库中进行记录.当文件commit时,将已修改的文件commit到git的本地代码库.而为traced的文件,未进行trace(管理),当commit时,文件不commit到本地代码库.
\r
91 使用traced状态,将代码中一些编译时临时的输出文件,不放入代码库中,便于代码管理.
\r
97 (use "git add <file>..." to include in what will be committed)
\r
99 nothing added to commit but untracked files present (use "git add" to track)
\r
102 使用git的status命令浏览代码库中的文件状态.
\r
106 Changes to be committed:
\r
107 (use "git reset HEAD <file>..." to unstage)
\r
110 可以看到,git代码库的缓存中包含了一个文件.
\r
117 Changes to be committed:
\r
118 (use "git reset HEAD <file>..." to unstage)
\r
123 Changes to be committed:
\r
124 (use "git reset HEAD <file>..." to unstage)
\r
132 2.5.push代码到git-server
\r
140 3.3.merge时代码的conflect
\r
146 5.1.修改并添加文件,commit&push到新的分支
\r
148 5.2.新的分支代码merge到主分支
\r
150 5.3.新的分支和主分支代码同时修改后的merge
\r
161 git config --global user.name "Your Name"
\r
162 git config --global user.email "email@example.com"
\r
164 注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
\r
166 git config --global user.name "Your Name"
\r
167 git config --global user.email "email@example.com"
\r
171 编写代码之前还需要生成并配置SSH-KEY(这个东东是将本地的工作区中的分支和远程的分支进行关联的)
\r
175 #在本地(我的电脑或者计算机)中找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件(id_rsa是私钥,id_rsa.pub是公钥),将id_rsa.pub文件中的内容 复制到粘贴板
\r
176 cat ~/.ssh/id_rsa.pub | clip # Windows
\r
177 cat ~/.ssh/id_rsa.pub | pbcopy # MacOS
\r
179 注意:粘贴的一定是.pub文件,里面的是公钥,另一个文件不能随便透露,里面是私钥。
\r
182 cat ~/.ssh/id_rsa.pub
\r
189 $ git commit -m 'initial project version'
\r
193 $ git clone https://github.com/libgit2/libgit2
\r
194 这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。
\r
196 $ git clone https://github.com/libgit2/libgit2 mylibgit
\r
200 详见下载的示意图。git对untraces,unmodified,modofied,staged文件进行跟踪。
\r
204 要查看哪些文件处于什么状态,可以用 git status 命令。
\r
206 在克隆仓库后立即使用此命令,会看到类似这样的输出:
\r
209 nothing to commit, working directory clean
\r
211 在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:
\r
212 $ echo 'My Project' > README
\r
216 (use "git add <file>..." to include in what will be committed)
\r
218 nothing added to commit but untracked files present (use "git add" to track)
\r
222 现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 CONTRIBUTING.md 的已被跟踪的文件,然后运行 git status 命令,会看到下面内容:
\r
225 Changes to be committed:
\r
226 (use "git reset HEAD <file>..." to unstage)
\r
228 Changes not staged for commit:
\r
229 (use "git add <file>..." to update what will be committed)
\r
230 (use "git checkout -- <file>..." to discard changes in working directory)
\r
231 modified: CONTRIBUTING.md
\r
233 modified表示文件在git仓库中,但修改后未添加到commit列表,即未在stage中。这在git reset --hard和git reset --soft时有些不同。
\r
237 git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。 运行 git status -s ,状态报告输出如下:
\r
248 M 修改过的文件前面有 M 标记。 M有两个可以出现的位置。
\r
249 出现在右边的 M 表示该文件被修改了,但是还没放入暂存区。
\r
250 出现在靠左边的 M 表示该文件被修改了,并放入了暂存区。
\r
253 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子:
\r
258 参考: https://github.com/github/gitignore
\r
261 git diff将通过文件补丁的格式显示具体哪些行发生了改变。
\r
262 若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些。)
\r
268 这种方式会启动文本编辑器以便输入本次提交的说明。 (默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。当然也可以按照 起步 介绍的方式,使用 git config --global core.editor 命令设定你喜欢的编辑软件。)
\r
270 在 commit 命令后添加 -m选项,将提交信息与命令放在同一行,如下所示:
\r
271 $ git commit -m "Story 182: Fix benchmarks for speed"
\r
272 [master 463dc4f] Story 182: Fix benchmarks for speed
\r
273 2 files changed, 2 insertions(+) create mode 100644 README
\r
277 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交。
\r
279 git是一个分布式的版本管理软件。在代码从远处服务器更新到本地时,更新到是所有的版本更新内容。所以commit递交到本地的代码库。通常服务器上的project不一定是当前代码修改者的,如果代码修改者在project中,具有写权限,即可将代码push到远处服务器上。
\r
280 git push [remote-name] [branch-name]。
\r
283 $ git push origin master
\r
285 这里origin是服务器,master是branch。服务器名详见"remote"相关的内容,它用于代替冗长的web地址。
\r
291 $ git fetch [remote-name]
\r
293 通常在其它开发者commit代码修改后,需要进行的代码获取操作。
\r
294 必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
\r
296 如果你有一个分支设置为跟踪一个远程分支(阅读下一节与 Git 分支 了解更多信息),可以使用 git pull 命令来自动的获取然后合并远程分支到当前分支。
\r
297 $ git checkout iss53
\r
298 Switched to a new branch "iss53"
\r
300 通常fetch某个remote的某个branch的代码,需要使用上面这个命令。
\r
314 $ git mv file_from file_to
\r
318 $ git mv README.md README
\r
321 Changes to be committed: (use "git reset HEAD <file>..." to unstage)
\r
322 renamed: README.md -> README
\r
324 其实,运行 git mv 就相当于运行了下面三条命令:
\r
325 $ mv README.md README
\r
331 git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。
\r
333 一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交:
\r
336 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:
\r
337 $ git commit -m 'initial commit'
\r
338 $ git add forgotten_file
\r
339 $ git commit --amend
\r
344 $ git reset HEAD CONTRIBUTING.md
\r
345 Unstaged changes after reset: M CONTRIBUTING.md
\r
349 $ git checkout -- CONTRIBUTING.md
\r
356 如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin - 这是 Git 给你克隆的仓库服务器的默认名字:
\r
358 $ git clone https://github.com/schacon/ticgit
\r
359 Cloning into 'ticgit'...
\r
360 remote: Reusing existing pack: 1857, done.
\r
361 remote: Total 1857 (delta 0), reused 0 (delta 0)
\r
362 Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
\r
363 Resolving deltas: 100% (772/772), done.
\r
364 Checking connectivity... done.
\r
369 你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
\r
370 $ git remote -v origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push)
\r
372 这里origin即是前面的web地址的名称。它用于git push是的server-name。
\r
374 如果你的远程仓库不止一个,该命令会将它们全部列出。 例如,与几个协作者合作的,拥有多个远程仓库的仓库看起来像下面这样:
\r
378 bakkdoor https://github.com/bakkdoor/grit (fetch)
\r
379 bakkdoor https://github.com/bakkdoor/grit (push)
\r
380 cho45 https://github.com/cho45/grit (fetch)
\r
381 cho45 https://github.com/cho45/grit (push)
\r
382 defunkt https://github.com/defunkt/grit (fetch)
\r
383 defunkt https://github.com/defunkt/grit (push)
\r
384 koke git://github.com/koke/grit.git (fetch)
\r
385 koke git://github.com/koke/grit.git (push)
\r
386 origin git@github.com:mojombo/grit.git (fetch)
\r
388 这里表示origin这个服务器上下载的代码,包含了多个cooperator,每个cooperator使用自己的server地址。这对于多个project的协同使用,通常用到的比较少。
\r
392 我在之前的章节中已经提到并展示了如何添加远程仓库的示例,不过这里将告诉你如何明确地做到这一点。 运行 git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写:
\r
394 $ git remote origin
\r
395 $ git remote add pb
\r
396 https://github.com/paulboone/ticgit
\r
398 origin https://github.com/schacon/ticgit (fetch)
\r
399 origin https://github.com/schacon/ticgit (push)
\r
400 pb https://github.com/paulboone/ticgit (fetch)
\r
401 pb https://github.com/paulboone/ticgit (push)
\r
405 $ git fetch [remote-name]
\r
409 $ git push origin master
\r
413 $ git remote show origin
\r
417 $ git remote rename pb paul
\r
422 同样也会修改你的远程分支名字。 那些过去引用 pb/master 的现在会引用 paul/master。
\r
424 如果因为一些原因想要移除一个远程仓库,可以使用 git remote rm :
\r
426 $ git remote rm paul
\r
434 $ git branch testing
\r
436 它只是为你创建了一个可以移动的新的指针。实际在每次commit之后,是以sha1校验值为id的tree结构。分支创建了对应的指针,用于指向某个节点。
\r
440 $ git checkout testing
\r
444 $ git checkout -b iss53
\r
445 Switched to a new branch "iss53"
\r
449 $ git checkout iss53
\r
452 $ git branch -d hotfix
\r
453 Deleted branch hotfix (3a0874c).
\r
457 假设你已经修正了 #53 问题,并且打算将你的工作合并入 master 分支。 为此,你需要合并 iss53 分支到 master 分支,这和之前你合并 hotfix 分支所做的工作差不多。 你只需要检出到你想合并入的分支,然后运行 git merge 命令:
\r
459 $ git checkout master
\r
460 Switched to branch 'master'
\r
461 $ git merge iss53 Merge made by the 'recursive' strategy.
\r
463 1 file changed, 1 insertion(+)
\r