Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
默认git行为I don';我不明白_Git_Git Branch - Fatal编程技术网

默认git行为I don';我不明白

默认git行为I don';我不明白,git,git-branch,Git,Git Branch,对于不受版本控制的文件/文件夹,我尚未决定是否喜欢以下行为 特别是,当您签出不同的分支时,未版本化的文件似乎会跟随您,这似乎很奇怪。似乎说文件应该只存在于创建它们的分支中 有人能帮我理解为什么/如果这是可取的行为吗 例如: shopkins@shax:~/tmp/test$ ls hello.txt shopkins@shax:~/tmp/test$ git branch - * master my_branch shopkins@shax:~/tmp/test$ shopkins@sha

对于不受版本控制的文件/文件夹,我尚未决定是否喜欢以下行为

特别是,当您签出不同的分支时,未版本化的文件似乎会跟随您,这似乎很奇怪。似乎说文件应该只存在于创建它们的分支中

有人能帮我理解为什么/如果这是可取的行为吗

例如:

shopkins@shax:~/tmp/test$ ls
hello.txt
shopkins@shax:~/tmp/test$ git branch  
-
* master
my_branch
shopkins@shax:~/tmp/test$ 
shopkins@shax:~/tmp/test$ git checkout my_branch 
Switched to branch 'my_branch'
shopkins@shax:~/tmp/test$ mkdir adir
shopkins@shax:~/tmp/test$ touch adir/my_branch.txt
shopkins@shax:~/tmp/test$ git add adir/
shopkins@shax:~/tmp/test$ git commit -a -m "added adir with my_branch.txt"
[my_branch d36964c] added adir with my_branch.txt
0 files changed, 0 insertions(+), 0 deletions(-)
shopkins@shax:~/tmp/test$ git checkout my_branch
Switched to branch 'my_branch'
shopkins@shax:~/tmp/test$ tree
.
|-- adir
|   |-- my_branch.txt
|   `-- orphan.txt
`-- hello.txt

1 directory, 3 files

create mode 100644 adir/my_branch.txt
shopkins@shax:~/tmp/test$ touch adir/orphan.txt
shopkins@shax:~/tmp/test$ git checkout master
Switched to branch 'master'
shopkins@shax:~/tmp/test$ ls
adir  hello.txt
shopkins@shax:~/tmp/test$ tree
.
|-- adir
|   `-- orphan.txt
`-- hello.txt

1 directory, 2 files
编辑 事实证明,在下面的第一次编辑中,分支之间的文件没有任何更改。谢谢大家的帮助

编辑 当发生签出时,git似乎不会编写版本化文件的修改。在以下示例中,另一个.txt不受版本控制:

shopkins@shax:~/tmp/test$ ls -l
total 4
drwxr-xr-x 2 shopkins shopkins 4096 2011-02-21 21:49 adir
-rw-r--r-- 1 shopkins shopkins    0 2011-02-21 21:47 another.txt
-rw-r--r-- 1 shopkins shopkins    0 2011-02-21 21:49 hello.txt
shopkins@shax:~/tmp/test$ git checkout my_branch
Switched to branch 'my_branch'
shopkins@shax:~/tmp/test$ ls -l
total 4
drwxr-xr-x 2 shopkins shopkins 4096 2011-02-21 21:49 adir
-rw-r--r-- 1 shopkins shopkins    0 2011-02-21 21:47 another.txt
-rw-r--r-- 1 shopkins shopkins    0 2011-02-21 21:49 hello.txt
shopkins@shax:~/tmp/test$ 

Git甚至不知道存在未版本化的文件。从技术上讲,它们甚至不是存储库的一部分。这就是为什么它们被称为“未版本化文件”的原因。Git不会修改、删除、存储或跟踪任何文件,除非它被告知这样做


通常情况下,如果您的软件生成临时文件作为其构建过程的一部分,或者如果编译后的可执行文件与源代码保留在同一目录中,则需要这样做。显然,如果有人正在克隆您的存储库以便从您那里下载您的软件,您可能希望所有这些文件都被“留下”。但更重要的是,您不希望它们将版本历史记录弄乱。这些文件何时更改并不重要,只有在源代码更改时才重要。因此,每次提交时看到这些文件的差异只会使您更难找到实际需要的信息。

Git甚至不知道存在未版本化的文件。从技术上讲,它们甚至不是存储库的一部分。这就是为什么它们被称为“未版本化文件”的原因。Git不会修改、删除、存储或跟踪任何文件,除非它被告知这样做


通常情况下,如果您的软件生成临时文件作为其构建过程的一部分,或者如果编译后的可执行文件与源代码保留在同一目录中,则需要这样做。显然,如果有人正在克隆您的存储库以便从您那里下载您的软件,您可能希望所有这些文件都被“留下”。但更重要的是,您不希望它们将版本历史记录弄乱。这些文件何时更改并不重要,只有在源代码更改时才重要。因此,每次提交时看到这些文件的差异只会使您更难找到实际需要的信息。

这可以加快构建速度,因为未添加的输出挂起在分支开关之间,并且您没有将make输出发送到某个外部目录

这可以加快构建速度,因为未添加的输出挂起在分支交换机之间,并且您没有将make输出发送到某个外部目录

为什么git会删除它无法恢复的文件?
Git只留下它不知道的文件。

为什么Git会删除它无法恢复的文件?
Git只留下它不知道的文件。

谢谢您的输入。我担心,如果试图在不同的分支之间重新编译,这些临时文件(如已编译的可执行文件)会导致问题。假设您切换到一个分支并执行make命令,然后切换到另一个分支并执行另一个make命令,编译器会因为文件/可执行文件的日期修改属性而认为所有内容都是最新的吗?我相信GIT会在您切换分支时写入文件修改时间(如果开关上需要更新文件)。这意味着make会将此文件的任何依赖项视为未满足,并重新编译它们。我不能代表其他生成系统,但我相信它们都以类似的方式工作。我测试了我认为您的意思。您能看一下编辑吗?这两个分支之间实际上没有任何更改。您正在上查看同一个节点git tree。您需要在某些.file中包含不同的内容。如果不需要更改版本文件以在分支之间切换,则不会更改。如果分支实际包含不同版本的文件,则结果会有所不同。感谢您的输入。我很担心这样的临时文件(如编译的可执行文件)如果尝试在不同的分支之间重新编译会导致问题。假设您切换到一个分支并执行make命令,然后切换到另一个分支并执行另一个make命令,编译器是否会因为文件/可执行文件的日期修改属性而认为所有内容都是最新的?我相信GIT会将文件修改时间写为执行分支切换时(如果需要更新交换机上的文件)。这意味着make会将此文件的任何依赖项视为未满足,并重新编译它们。我不能代表其他生成系统,但我相信它们都以类似的方式工作。我测试了我认为您的意思。您能看一下编辑吗?这两个分支之间实际上没有任何更改。您正在上查看同一个节点git tree。您需要在some.file中包含不同的内容。如果不需要更改版本文件以在分支之间切换,则不需要更改。如果分支实际上包含不同版本的文件,则结果会有所不同。如果我要将孤儿.txt文件添加到我的_分支并提交更改,则ckout back to master,'adir'已经不存在了。我想知道为什么它会将目录留在那里,直到它没有未经版本控制的文件为止?Git永远不会删除文件,除非它被明确告知。如果目录中包含未被告知删除的文件,它将保留这些目录。@Max E.是的。这是一个反问。@Hersheezy我的观点是:Git不应该删除未跟踪的文件,因为它无法还原它们。如果我要将orphan.txt文件添加到我的_分支并提交更改,然后签回master“adir”