我如何从一个git回购签出一个文件?
当前回答
在GIT 1.7.2.2中工作
例如,你有一个带有分支branch1和branch32的远程some_remote
所以要签出一个特定的文件,你可以调用这些命令:
git checkout remote/branch path/to/file
举个例子,大概是这样的
git checkout some_remote/branch32 conf/en/myscript.conf
git checkout some_remote/branch1 conf/fr/load.wav
这个检出命令将整个文件结构conf/en和conf/fr复制到当前目录,在这里您调用这些命令(当然,我假设您在之前的某个时候运行了git init)
其他回答
你可以通过
git archive --format=tar --remote=origin HEAD | tar xf -
git archive --format=tar --remote=origin HEAD <file> | tar xf -
首先使用-n选项和——depth 1选项克隆repo,前者抑制所有文件的默认签出,后者意味着它只获取每个文件的最新修订
git clone -n git://path/to/the_repo.git --depth 1
然后签出你想要的文件,就像这样:
cd the_repo
git checkout HEAD name_of_file
另一个解决方案,类似于使用——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签出。
GitHub Mate更容易做到这一点,它是一个Chrome扩展,让你点击文件图标下载它。也是开源的
这里是一个完整的解决方案,只拉和推一个特定的文件在git仓库:
首先,你需要克隆git存储库,并给出一个特殊提示——不签出
git clone --no-checkout <git url>
下一步是用下面的命令清除索引中的非暂存文件:
git reset
现在你可以开始拉出你想要修改的文件了:
git checkout origin/master <path to file>
现在,存储库文件夹包含您可以立即开始编辑的文件。编辑完成后,您需要执行简单而熟悉的命令序列。
git add <path to file>
git commit -m <message text>
git push
推荐文章
- git可以自动在空格和制表符之间切换吗?
- Git暂存文件列表
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- Python列表目录,子目录和文件
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 真实的恶魔
- 我如何知道我在S3桶中存储了多少对象?
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?
- git推挂在Total line之后