好的,在看到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(和另一个版本)

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


当前回答

警告:良好的GUI/前端,您可能还想查看qgit,它是Git的跨平台(Linux/W32)存储库查看器,也可以用作最常见Git操作的高级前端,事实上,它可以通过所谓的“自定义操作”轻松增强,以便用户提供自定义操作。

其他回答

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

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的模式语法相当简单,但功能强大。它适用于我将在下面提到的所有三个不同的文件。

空行不忽略任何文件,通常用作分隔符。以#开头的行用作注释。这个前缀是可选的,将否定模式。任何匹配的否定模式都将覆盖优先级较低的模式。支持高级表达式和通配符示例:模式:*。[oa]将忽略存储库中以.o或.a结尾的所有文件(对象和存档文件)如果一个模式有一个以斜杠结尾的目录,git将只匹配该目录及其下的路径。这将排除匹配中的常规文件和符号链接。前导斜杠将匹配该路径名中的所有文件。示例:模式/*.c将与文件foo.c匹配,但不匹配bar/b真棒.c

gitignore(5)手册页中的好例子:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

通常有三种不同的方法可以忽略未跟踪的文件。

1) 对存储库的所有用户忽略:

将名为.gitignore的文件添加到工作副本的根目录中。

编辑.gitignore以匹配您的首选项,哪些文件应该/不应该被忽略。

git add .gitignore 

当你完成任务后再去做。

2) 仅忽略存储库副本:

在工作副本中添加/编辑文件$GIT_DIR/info/exclude,使用您的首选模式。

示例:我的工作副本是~/src/project1,因此我将编辑~/src-project1/.git/info/exclude

你完了!

3) 在所有情况下,在您的系统中忽略:

系统的全局忽略模式可以放在一个名为whatever的文件中。

我个人的名字叫做~/.giglobalignore

然后,我可以用以下行编辑~/.gitconfig文件,让git知道这个文件:

core.excludesfile = ~/.gitglobalignore

你完了!

我发现gitignore手册页是获取更多信息的最佳资源。

如何设置共享团队存储库?

这里描述了如何建立一个普通的存储库——但是如何建立一种团队存储库,每个人都可以从中提取和推送到其中?

使用共享NFS文件系统

例如,假设您的团队已经拥有可以使用的共享组成员资格。

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

要开始使用此存储库,最简单的方法是从您已经使用过的本地存储库开始:

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

其他人现在可以克隆并开始工作:

cd your/local/workspace
git clone /your/share/folder/project.git

使用SSH

在目标服务器上设置用户帐户。无论您使用没有密码的帐户、有密码的帐户还是使用authorized_keys,都取决于您所需的安全级别。有关更多信息,请参阅通过SSH配置Git。

如果所有开发人员都使用相同的帐户访问此共享存储库,则不需要使用上述--shared选项。

以与上述相同的方式启动存储库后,您可以执行如下初始推送:

cd your/local/workspace/project
git remote add origin user@server:/path/to/project.git
git push origin master

看到与上面的相似之处了吗?另外,如果帐户有密码,唯一可能发生的事情就是SSH请求密码。如果您在没有密码的帐户上得到此提示,则SSH服务器可能已禁用PermitEmptyPassword。

克隆现在看起来像这样:

cd your/local/workspace
git clone user@server:/path/to/project.git

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

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

Git重置

假设你做了一个拉,把它合并到你的代码中,然后决定你不喜欢它。使用git-log或tig,找到您想返回的任何位置的哈希(可能是在拉/合并之前的最后一次提交),复制哈希,然后执行以下操作:

# Revert to a previous commit by hash:
git-reset --hard <hash>

您可以使用HEAD^作为上一次提交的快捷方式,而不是哈希。

# Revert to previous commit:
git-reset --hard HEAD^