Git分支和ls

时间:2011-08-18 10:22:06

标签: linux git git-branch

我不确定这是否是正确的问题,如果没有,请重定向。

我是git的新手,在学习它时我偶然发现了这个。 git branch branchName和'ls'如何相互合作。 例如: 如果我有一个master和test分支,test分支与master分支相比有一个额外的testFile。 现在,在主分支中,如果我ls,我将不会看到testFile,但在切换到测试分支和ls后,我将看到testFile

kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ git branch
  master
* test
kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ git checkout master
M   editor/editor_parts/syntax/operator_syntax.js
Switched to branch 'master'
kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ ls
cgi-bin     index.php                    misc           underConstruction
editor      jquery-1.5.2.min.js          php.php        userManage
fileManage  jquery-ui-1.8.11.custom.css  projectManage  userPages
images      login                        test.php
kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ git checkout test
M   editor/editor_parts/syntax/operator_syntax.js
Switched to branch 'test'
kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ ls
cgi-bin     index.php                    misc           test.php
editor      jquery-1.5.2.min.js          php.php        underConstruction
fileManage  jquery-ui-1.8.11.custom.css  projectManage  userManage
images      login                        testFile.txt   userPages
kiran@kiran-desktop:/media/kiran/Linux_Server/dev$ 

但两个分支的pwd显示相同的位置。

那么,切换分支如何改变ls的输出(据我所知,这是linux的一个功能)?

2 个答案:

答案 0 :(得分:2)

Git,与SVN不同,您知道将分支保存在不同的目录中,只保留存储库目录中的当前工作分支。

所有分支(实际上,所有对象)都存储在repo根目录中的“.git”文件夹中,并且在签出特定分支时,只存在属于特定分支的文件。 (以及那些未添加到仓库中的文件)

答案 1 :(得分:2)

git checkout将您从一个分支切换到另一个分支。为此,它将检出的存储库中的文件替换为分支中的文件。

您的存储库实际上是.git子目录。

如果您执行ls -a,您会看到它:

% ls -a -1
.git
.gitignore
...

跟踪文件存储在那里。您通常只能看到当前签出的分支。当您结帐其他分支时,git会抓取.git中的文件,您可以使用ls查看这些文件。

有关 git如何工作的更多信息,请查看此问题的答案:Where can I find a tutorial on Git's internals?