我喜欢在我的本地计算机上练习Git,这是最好的方法。 我想创建两个Windows用户帐户,两个存储库(每个用户一个), 并模仿远程存储库 - 全部在我的本地计算机中。
我没有本地网络,但我确实可以访问互联网。 我对解决拉动冲突特别感兴趣 多个分支等。
请分享您对学习Git的最佳方式的想法和经验。
答案 0 :(得分:4)
您可以在文件系统上创建第一个存储库(假设您将其称为origin
)并在内部运行:
git init --bare
然后你可以用:
做第一次克隆git clone origin clone1
还有第二个:
git clone origin clone2
然后,您可以提交,推送和拉入每个克隆进行训练。
答案 1 :(得分:1)
我在.bash_aliases
文件中有这个:
alias gitlearn='cd; rm -rf gitlearn; mkdir gitlearn; cd gitlearn; git init; git commit --allow-empty -m"Add empty, initial commit"'
任何时候我想要使用git进行探索或练习,我只需要输入gitlearn
,然后我在~/gitlearn/
中使用新的仓库,并进行第一次空提交,这样就可以进行变基第一次实际提交,因为您需要在第一次提交时指定提交,然后再进行重新定位。
然后我只是使用一堆linux命令来快速进行我需要的任何设置。我已经测试了分支和合并策略,在一个新的,共同的第三个回购,测试分支概念中交叉完全独立,无关的回购的提交(尊重日期),探索了git log --graph
输出与真正疯狂的合并发生了什么,让我自己熟悉临时克隆上的命令(比如可怕的filter-branch
),甚至可以找出实际需要的东西(你可以手工创建自己)来拥有一个有效的git repo。
从空目录开始:
~/gitlearn$ ls .git
ls: cannot access .git: No such file or directory
~/gitlearn$ git st
fatal: Not a git repository (or any parent up to mount point /home/gfixler)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
这就是制作git repo所需的全部内容:
~/gitlearn$ mkdir -p .git/objects .git/refs
~/gitlearn$ echo 'ref: refs/heads/master' >.git/HEAD
~/gitlearn$ git st
# On branch master
#
# Initial commit
#
~/gitlearn$ tree .git
.git
|-- HEAD
|-- objects
`-- refs
2 directories, 1 file
我会做这样的事情:
~/gitlearn$ echo something >afile
~/gitlearn$ git add afile
~/gitlearn$ git st
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: afile
#
~/gitlearn$ git commit -m'Add something to afile'
[master 3f78112] Add something to afile
1 file changed, 1 insertion(+)
create mode 100644 afile
~/gitlearn$ echo another thing >>afile
~/gitlearn$ git diff
diff --git a/afile b/afile
index deba01f..fa8eba8 100644
--- a/afile
+++ b/afile
@@ -1 +1,2 @@
something
+another thing
~/gitlearn$ git add --update .
~/gitlearn$ git commit -m'Add another thing to afile'
[master 5c639d9] Add another thing to afile
1 file changed, 1 insertion(+)
~/gitlearn$ git checkout -b feature
Switched to a new branch 'feature'
~/gitlearn$ echo >>afile
~/gitlearn$ echo feature 1 >>afile
~/gitlearn$ git diff
diff --git a/afile b/afile
index fa8eba8..be87597 100644
--- a/afile
+++ b/afile
@@ -1,2 +1,4 @@
something
another thing
+
+feature 1
~/gitlearn$ git add --update .
~/gitlearn$ git ci -m'Add feature 1 to afile'
[feature 25b20ab] Add feature 1 to afile
1 file changed, 2 insertions(+)
~/gitlearn$ git log --all --graph --decorate --oneline
* 25b20ab (HEAD, feature) Add feature 1 to afile
* 5c639d9 (master) Add another thing to afile
* 3f78112 Add something to afile
* 70e28a0 Add empty, initial commit
~/gitlearn$
等等......直到我理解了一个概念。这是一种快速的实验方式。我也使用了很多别名,这样可以加快速度,例如,使用git add --update .
我只需输入git add --u<TAB> .
,因此大多数命令的按键次数都少于15次。
我现在向几个人推荐这个。这是一个非常好的方式,让我自己适应首先的基础知识,最近更深入的git内部。
至于遥控器,我一直都在模仿当地人。 mkdir remote.git; cd remote.git; git init --bare; cd ..; git clone remote.git local; cd local
现在你在'本地'回购中,认为'remote.git'中的那个是它的起源。这里与典型的设置没有区别,除了裸,'remote.git'实际上在你的本地光盘上。在'local'中你可以推送,获取和拉出'remote.git',它在功能上与你在本地和物理远程仓库之间做的一样。