我不确定这是否是正确的问题,如果没有,请重定向。
我是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的一个功能)?
答案 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?