我如何从一个git回购签出一个文件?
当前回答
这听起来像是你试图从集中式版本控制中继承一个想法,而git本质上不是这样的——它是分布式的。如果你想使用git存储库,你可以克隆它。然后,您就拥有了工作树的所有内容和所有历史记录(好吧,至少是指向当前分支顶端的所有内容),而不仅仅是单个文件或单个提交的快照。
git clone /path/to/repo
git clone git://url/of/repo
git clone http://url/of/repo
其他回答
如果您只需要下载文件,则不需要使用Git签出。
GitHub Mate更容易做到这一点,它是一个Chrome扩展,让你点击文件图标下载它。也是开源的
在git中,你在更新文件之前不会“签出”它们-这似乎是你所追求的。
许多系统,如clearcase, csv等,都要求您在对文件进行更改之前“签出”文件。Git不需要这个。克隆存储库,然后在存储库的本地副本中进行更改。
一旦你更新了文件,你可以做:
git status
查看修改了哪些文件。你先添加你想要提交给index的对象(index就像一个要签入的列表):
git add .
or
git add blah.c
然后do git status会告诉你哪些文件被修改了,哪些文件在索引中准备提交或签入。
要将文件提交到存储库副本,请执行以下操作:
git commit -a -m "commit message here"
参见git网站上的手册和指南链接。
说文件名是123.txt,这对我来说是有效的:
git checkout --theirs 123.txt
如果文件在目录a中,请确保正确地指定它:
git checkout --theirs "A/123.txt"
另一个解决方案,类似于使用——filter=blob:none的解决方案是使用——filter=tree:0(你可以在这里阅读关于区别的解释)。
这种方法通常比blob-one更快,因为它不下载树结构,但有一个缺点。考虑到您延迟了树的检索,当您进入repo目录时将受到惩罚(取决于repo的大小和结构,它可能比简单的浅克隆大许多倍)。
如果你是这种情况,你可以通过不进入回购来解决:
git clone -n --filter=tree:0 <repo_url> tgt_dir
git -C tgt_dir checkout <branch> -- <filename>
cat tgt_dir/<filename> # or move it to another place and delete tgt_dir ;)
请考虑到,如果您必须签出多个文件,树填充也会影响您的性能,因此我建议仅在回购足够大的情况下才对单个文件执行此操作。
Git checkout <other-branch>—<single-file>适用于我的Git .2.37.1。 然而,该文件是(git-魔术)提交的,我不能看到正确的git diff。 然后运行git restore——staging db/structure。SQL来取消它。
这样我就有了我想要的确切版本的文件,我可以看到该文件与其他版本的区别。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 如何在Python中获得所有直接子目录
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 如何在Ruby中创建文件
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支