当被问及Git 在2007年Google的技术演讲期间可以处理多少文件时,引用Linus Torvalds的话(43:09):
…Git跟踪您的内容。它永远不会跟踪单个文件。您无法在Git中跟踪文件。您可以做的是,您可以跟踪一个文件的项目,但是如果您的项目有一个文件,请确保做到这一点并且可以做到,但是如果您跟踪10,000个文件,Git永远不会将它们视为单个文件。Git认为一切都是完整的内容。Git中的所有历史都基于整个项目的历史…
(这里的成绩单。)
然而,当你潜入Git的书,你被告知的第一件事是,在Git的文件既可以跟踪或未经跟踪。此外,在我看来,整个Git体验都面向文件版本控制。使用git diff
或git status
输出时按文件显示。使用时,git add
您还可以根据每个文件进行选择。您甚至可以基于文件查看历史记录,而且速度很快。
该陈述应如何解释?在文件跟踪方面,Git与其他源代码控制系统(例如CVS)有何不同?
\n\n\n…有时,这个过程并不顺利。如果您在要合并的两个分支中对同一文件的相同部分进行了不同的更改,Git 将无法干净地合并它们。...
\n
不明确的“以不同方式更改同一文件的相同部分”表达式应该如何解释?Git 内部是否在跨分支的冲突文件中执行逐行比较?
\n\n例子:
\n\n假设在分支L上,我在 README.md 的开头添加了一个额外的换行符。这是否意味着对其他分支R上的 README.md 的第一行进行的修改会在合并时触发冲突?
\n\n您可能会认为天真的逐行比较会失败,因为L中的所有行都已移动了一个位置,而R中的某些行保持不变。
\nGit手册的第3.1章明确指出,只有暂存文件才能作为blob存储在提交树中。
如果像提交对象一样,blob获得了对其内容唯一的哈希ID,那么Git如何设法跟踪跨提交的blob与文件之间的对应关系?由于提交文件的内容不同,因此它们在不同提交中的哈希ID无法匹配。
一个简单的例子:
假设我只是创建了一个没有提交的空仓库。我创建一个文件README.md,暂存并提交。Git存储一个树对象,该树对象的Blob由README.md内容的哈希标识。
让我们假设我修改了README.md,stage和commit。Git存储一个树对象,该树对象的Blob由README.md的已修改内容的哈希标识。自然,我们可以期望第二个哈希与第一个提交树中标识README.md的blob的哈希不同。
Git将如何回答有关README.md历史记录的请求?
git log README.md
Run Code Online (Sandbox Code Playgroud)
我的直觉是,它会遍历提交历史并比较相关的blob,但是我看不到Git如何知道blob对应于同一文件的不同版本,除非是琐碎的情况。
据我了解,每当您运行远程对象时,都会在本地下载远程对象,并创建一个名为远程分支提交的轻量级git fetch
指针。FETCH_HEAD
HEAD
由于分支只是一个指针,这与创建本地分支有什么不同?哪些设计考虑因素支持在使用时不创建本地分支的情况git fetch
?
我正在尝试在几台没有管理员权限的 Windows 10 PC 上安装最新的 Python (3.7.3)。为此,我从下载链接下载了相应的可执行安装程序。
执行安装程序时,某些 Windows PC 显示强制选中“为所有用户安装启动程序(推荐)”选项。我无法继续安装,因为即使 Python 将安装在具有读写权限的用户目录上,我仍被要求提供管理员权限。
为什么要强制选中“为所有用户安装启动程序(推荐)”选项?它可能与现有的启动器安装有关吗?有什么办法吗?
关于如何禁用 git 的 http ssl 验证有多个问题(请检查How do I set GIT_SSL_NO_VERIFY for certain repos only?和Unable to set the sslVerify to false)。
但是,我无法找到禁用验证的潜在安全影响的全面描述。
这种行为的风险有多大?为什么?