2011-08-18 90 views
1

我不确定这是否是正确的地方问这个问题,如果不是,请重定向我。Git分支和ls

我是新来的混帐,同时学习它我偶然发现了这一点。 git branch branchName和'ls'是如何相互协作的。 例如: 如果我有一个主分支和测试分支,并且测试分支与主分支相比有额外的testFile。 现在,而在主分支,如果我ls,我就不会看到TESTFILE但切换到测试分支和ls后,我会看到TESTFILE

[email protected]:/media/kiran/Linux_Server/dev$ git branch 
    master 
* test 
[email protected]:/media/kiran/Linux_Server/dev$ git checkout master 
M editor/editor_parts/syntax/operator_syntax.js 
Switched to branch 'master' 
[email protected]:/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 
[email protected]:/media/kiran/Linux_Server/dev$ git checkout test 
M editor/editor_parts/syntax/operator_syntax.js 
Switched to branch 'test' 
[email protected]:/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 
[email protected]:/media/kiran/Linux_Server/dev$ 

pwd来自两个支路显示同一地点。

那么,开关分支怎么改变ls的输出(据我了解是linux的一个函数)?

回答

2

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

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

如果你做一个ls -a,你会看到它:

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

跟踪的文件都存储在那里。通常您只能看到当前签出的分支。当你签出一个不同的分支时,git抓取.git中的文件,你可以用ls看到它们。

看一看在这个问题的答案,了解更多有关如何混帐工作:Where can I find a tutorial on Git's internals?

2

Git,与SVN不同,你知道在不同的目录中保留分支,只保留当前工作分支在版本库目录中。

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