Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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未移动到特定分支_Git_Git Lfs - Fatal编程技术网

Git未移动到特定分支

Git未移动到特定分支,git,git-lfs,Git,Git Lfs,我克隆了一个我正在做的项目。然后我尝试使用git checkoutbranch\u name移动到一个特定的分支,但什么都没有发生,终端只是添加了一个空行。一段时间后,终端处于相同的状态。没有什么变化 我使用git-lfs克隆https\u-url\u-to\u-repo来克隆它 我的尝试: 再克隆一次 在我的mac中重新安装git 什么都没用 Git version = 2.13.2 (installed using homebrew) Git-lfs version = 1.5.5 (i

我克隆了一个我正在做的项目。然后我尝试使用git checkout
branch\u name
移动到一个特定的分支,但什么都没有发生,终端只是添加了一个空行。一段时间后,终端处于相同的状态。没有什么变化

我使用git-lfs克隆https\u-url\u-to\u-repo来克隆它

我的尝试:

  • 再克隆一次
  • 在我的mac中重新安装git
什么都没用

Git version = 2.13.2 (installed using homebrew)
Git-lfs version = 1.5.5 (installed using homebrew)
注意:我可以转移到其他分支,问题就在于那个分支。
问题可能是因为我在移动到该分支机构时internet连接中断造成的。

摘要:

这很可能是由于Git LFS中的一个小号,修复(或至少是解决方法)在Git LFS的稍新版本中

有关错误和修复/解决方法的描述,请参阅和

这是我的胶囊摘要:

当您使用Git LFS时,您的标准Git配置将被修改为使用Git的清理和污迹过滤过程。污迹过滤器的意思是在文件从版本控制系统出来时“弄脏”文件,而干净过滤器的逻辑相反:它会清理文件,以便存储在VCS中。要使用这样的过滤器,您必须同时标记
.git/config
文件和
.gittattributes
文件;Git LFS会自动为您进行此标记

举一个有点愚蠢的例子,有些人喜欢让每一行都以CR-LF结尾,而不是仅仅换行(仅限LF),但却用换行结尾存储文件的版本控制版本。Git可以直接执行此操作(使用行尾过滤器),但如果出于某种原因您想自己编写一个程序来执行此操作,则可以使用污迹过滤器将LF仅替换为CR-LF,并使用干净的过滤器将CR-LF仅替换为LF。然后,工作树文件将具有所需的Windows样式的行尾,而提交的文件将具有所需的Linux样式的行尾

更实际地说,有些人喜欢扩展关键字(例如RCS或CVS,如
$Id$
)。Git还包括一个内置的
ident
过滤器,专门为
$Id$
执行此操作。扩展是在将文件提取到工作树时完成的(就像通过污迹过滤器一样),并在添加文件以进入新提交时删除并放回
$Id$
。1如果您想处理更多关键字,例如
$Log$
,2您必须编写自己的过滤器

Git LFS所做的是使用(滥用?)clean和smudge过滤器将大文件替换为经过特殊修饰的哈希ID,这些哈希ID充当指向外部大文件存储的“指针”。这样,Git从某种意义上说根本就不会存储甚至看到大文件。它只看到并存储这些经过修饰的散列。Git LFS过滤器负责在签出时用实际的大文件内容替换有趣的散列,并在Git add时用有趣的散列替换大文件内容(新的或重新使用,视情况而定)

但有一个技术问题:Git使用管道来实现污迹过滤器和清洁过滤器。(这些管道最近变得非常花哨;请参阅。)Git LFS代码和Git代码本身必须小心不要“阻塞”管道。。。但事实并非如此。(有关某些详细信息,请参见至。)


1具体而言,当文件从Git的索引复制到工作树时,污迹过滤器(连同ident和任何行尾黑客)将应用于文件。当文件从工作树复制到索引中时,将对其应用干净过滤器。由于提交的树仅从索引中找到的文件构建,并且索引版本始终是“干净的”,因此所有提交也始终是干净的


2在RCS和CVS中,
$Log$
所做的是扩展到文件的整个日志消息历史记录,基本上,所有涉及文件的提交都是基于文件的,除了RCS和CVS是基于文件的,而不是基于提交的,因此在编辑文件本身时,历史记录就在那里。在实际使用过这些东西之后,我坚信这是一个坏主意:这种元数据只属于版本控制系统(与Git或Mercurial一样,应该由开发人员分发,允许他们访问整个存储库)。尽管如此,还是有人喜欢这样做,从技术上讲,在Git中这样做是可能的。

分支机构存在吗?是的,它存在于远程回购中。同事可以在mac中访问它。可能是因为我在移动到那个分支@ZoolyHow时,网络中断了?转移到分支机构完全是本地操作。这与网络连接无关,“LFS”部分非常重要!常规Git存储库是自包含的,但LFS存储库不同:它们不存储大文件,而是只存储对大文件的引用。这意味着签出具有大文件的提交需要计算机通过网络加载该文件。(我添加了git-lfs标签。)事实上,在阅读了那里的描述和git-lfs的链接补丁之后,这很可能是问题所在,我将继续并将其作为答案发布。