好的,在看到PJ Hyett的这篇文章后,我决定跳到最后,使用Git。

所以我需要的是Git初学者实用指南。“初学者”被定义为知道如何处理他们的编译器,在某种程度上理解Makefile是什么,并且在没有很好地理解它的情况下接触了源代码控制。

“实用”被定义为这个人不想详细了解Git在后台做什么,甚至不关心(或知道)它是分布式的。你的答案可能暗示了这些可能性,但试着瞄准那些希望在备份和安全的“服务器”上保留“主”存储库的初学者,并将他们的本地存储库仅视为“客户端”资源。

So:

安装/设置

如何安装Git如何设置Git?尝试涵盖Linux、Windows、Mac,思考“客户端/服务器”思维。在Windows上使用Msysgit安装GIT服务器如何创建新项目/存储库?如何将其配置为忽略不属于代码库的文件(.obj、.user等)?

使用代码

如何获取最新代码?如何检查代码?如何提交更改?如何查看未提交的内容或当前代码库的状态?如何销毁不需要的提交?如何比较文件的两个版本,或当前文件和以前的版本?如何查看文件修订的历史记录?如何处理二进制文件(例如,visio文档或编译器环境)?如何合并“同时”更改的文件?如何撤消(恢复或重置)提交?

标记、分支、发布、基线

如何“标记”、“标记”或“发布”特定文件集的特定修订集,以便以后随时可以提取该修订集?你如何获得特定的“释放”?你是怎么分支的?如何合并分支?如何解决冲突并完成合并?如何将一个分支的部分合并到另一个分支中?什么是重新定基?如何跟踪远程分支?如何在远程存储库上创建分支?如何删除远程存储库上的分支?Git工作流示例

另外

描述并链接到一个好的GUI、IDE插件等,使Git成为一个非命令行资源,但请列出它的局限性和优点。msysgit-跨平台,包含在Git中gitk-跨平台历史查看器,包含在Git中gitnub-Mac OS Xgitx-Mac OS X历史查看器smartgit-跨平台、商业、测试版用于Linux的tig控制台GUIqgit-用于Windows、Linux的GUIGitExtensions-Windows包,包括友好的GUI初学者还应该知道其他常见任务吗?Git Status告诉您刚才做了什么,您有什么分支,以及其他有用的信息如何将subversion存储库设置为源代码控制源代码,从而有效地工作?

其他Git初学者参考

Git指南Git手册Git魔法数字广播GitHub指南Git教程Scott Chacon的Progit-书Git-SVN速成课程Git自下而上Git就绪gitref.org网站Git可视化备忘单

深入Git

从概念上理解Git计算机科学家Git(和另一个版本)

我会不时地检查条目,并“整理”它们,使它们具有一致的外观/感觉,并且很容易扫描列表-请随意遵循简单的“标题-简要说明-说明列表-获取和额外信息”模板。我还将链接到上面项目符号列表中的条目,以便以后很容易找到它们。


当前回答

gitstatus是你的朋友,经常使用它。适合回答以下问题:

那个命令刚刚做了什么?我在哪家分行?我要做出什么样的改变,我忘了什么吗?我上一次参与这个项目时(几天、几周或几个月前)是否正在做什么?

与svn状态不同,即使在大型项目上,git状态也几乎立即运行。在学习git时,我经常发现它让我感到安心,因为它能让我经常使用它,以确保我对发生的事情的心理模型是准确的。现在,我主要是用它来提醒自己,自从上次承诺以来,我发生了什么变化。

显然,如果您的.gitignore配置得当,它会更有用。

其他回答

如何创建新项目/存储库?

git存储库只是一个包含特殊.git目录的目录。

这与“集中式”版本控制系统(如subversion)不同,后者将“存储库”托管在远程服务器上,您可以将其签入“工作副本”目录。使用git,您的工作副本就是存储库。

只需在包含要跟踪的文件的目录中运行gitinit。

例如

cd ~/code/project001/
git init

这将在当前目录中创建一个.git(隐藏)文件夹。

要创建一个新项目,请使用一个附加参数(要创建的目录的名称)运行gitinit:

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

要检查当前路径是否在git存储库中,只需运行git-status-如果它不是存储库,它将报告“fatal:not a git repository”

您还可以列出.git目录,并检查它是否包含与以下类似的文件/目录:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

如果出于任何原因,您希望“去git”存储库(您希望停止使用git来跟踪该项目)。只需删除存储库基本级别的.git目录。

cd ~/code/project001/
rm -rf .git/

警告:这将销毁所有修订历史记录、所有标记和git所做的一切。它不会触及“当前”文件(您当前可以看到的文件),但以前的更改、删除的文件等将无法恢复!

如何“标记”一组特定的修订

如何“标记”、“标记”或“发布”特定文件集的特定修订集,以便以后随时可以提取该修订集?

使用git标记命令。

要简单地“标记”当前修订,只需运行。。

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

要列出当前标记,只需运行不带参数的git标记或-l(小写l):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

要删除标记,请使用-d标志:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

要标记特定(先前)提交,只需执行。。

git tag [tag name] [revision SHA1 hash]

例如:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

注意:默认情况下,git创建一个“轻量级”标记(基本上是对特定修订的引用)。“正确”的方法是使用-a标志。这将启动编辑器,请求标记消息(与请求提交消息相同,您也可以使用-m标志在命令行上提供标记消息)。使用带注释的标记创建一个具有自己的ID、日期、tagger(作者)和可选的GPG签名(使用-s标记)的对象。有关这方面的更多信息,请参阅本文

git tag mytagwithmsg -a -m 'This is a tag, with message'

要列出带有注释的标记,请使用-n1标志显示每个标记消息的1行(-n245显示每个注释的前245行,依此类推):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

有关更多信息,请参阅git标记(1)手册页

我开始学习Git官方教程。我认为它对于初学者来说已经足够实用了(根据你的定义,我过去是初学者,现在仍然是初学者!我几乎不懂makefile,我只玩过一点Apache Subversion等)。

认真地在Windows上使用Msysgit安装Git服务器的堆栈溢出帖子中添加Tim回答中的链接。

它完美地告诉了我如何使用msysgit在Windows上设置Git,这是一篇非常详细的文章。

如何跟踪远程分支

假设有一个您从中克隆本地存储库的远程存储库,并且假设该远程存储库上有一个名为“some_branch”的分支,下面是如何在本地跟踪它:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push