我一直在想是否有一个很好的"git export"解决方案,它创建了一个没有.git存储库目录的树的副本.我知道至少有三种方法:
git clone然后删除.git存储库目录.git checkout-index 提到这个功能,但开头是"只需将所需的树读入索引...",我不完全确定如何做.git-export是第三方脚本,基本上git clone进入临时位置,然后rsync --exclude='.git'进入最终目的地.这些解决方案都没有让我感到满意.最接近的一个svn export选项可能是选项1,因为这两个都要求目标目录首先为空.但是假设我可以弄清楚将树读入索引意味着什么,选项2似乎更好.
我对如何使用感到很困惑git archive.
我有一个git存储库,顶层有文件夹 Foo,Bar和Baz.我需要以SVN方式导出文件夹Foo,以便快速进行测试部署.
我才知道,我可以用git-archive在SVN-ISH出口排序的方式.
但事情就是这样,以下工作正常:
git archive master | tar -x -C ~/destination
Run Code Online (Sandbox Code Playgroud)
它导致目标文件夹中的Foo,Bar,Baz文件夹.
然而,下面就会因错误使用fatal not a valid object name:
git archive master/foo | tar -x -C ~/destination
Run Code Online (Sandbox Code Playgroud)
作为该git archive程序的概要,我看到它可以<tree-ish> [path]作为一个参数(概要总结为相关部分):
git archive <tree-ish> [path...]
Run Code Online (Sandbox Code Playgroud)
如果 master/foo 不是 tree-ish,那么是什么?
当我知道我不再使用分支时,是否可以关闭或锁定它?其实我想关闭一个分支,但我认为不可能用GIT关闭一个分支.删除怎么样?删除分支时,我的历史会发生什么?
我正在尝试检查远程git存储库的一部分.正如这里所建议的,在命令的帮助下
git archive --format=zip --remote=http://path_to_repository
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
fatal: Operation not supported by protocol.
Unexpected end of command stream
Run Code Online (Sandbox Code Playgroud)
Git是不是用http协议支持这个操作?这是托管环境或git本身的问题?任何指示都会有所帮助,谢谢.
我正在使用git-archive来存档git仓库中的子目录,如下所示:
git archive -o ../subarchive.zip HEAD subdir/*
Run Code Online (Sandbox Code Playgroud)
但是,生成的存档会维护subdir /目录结构,即内容为:
subdir/
whatever.js
morestuff.js
Run Code Online (Sandbox Code Playgroud)
当我真的想在存档的根目录中找到whatever.js和morestuff.js时.
怎么办?谢谢.
我有一个用git版本化的网站目录.我使用子模块来处理Twitter Bootstrap,colorbox和lessjs等必需的库,因为我不应该跟踪源代码,而只跟踪我使用的代码版本.
现在我想部署项目,因此我也需要子模块代码.通过使用git archive我不从子模块获取源文件/代码.
以下三种方法尝试实现我想要的但是不能工作: 第一种方法
#!/bin/sh
export revision="$1"
export GIT_INDEX_FILE=".git/tmpindex"
rm -f "$GIT_INDEX_FILE"
git read-tree $revision
export up="$(pwd)"
read_one_level () {
export GIT_ALTERNATE_OBJECT_DIRECTORIES="$GIT_ALTERNATE_OBJECT_DIRECTORIES":$(
git submodule foreach 'echo "$up/$path/.git/objects"' |
grep -E -v '^(Entering|No submodule mapping found)' |
tr '\n' : |
sed 's/:$//'
)
git submodule foreach '
cd "$up"
subcommit=$(git rev-parse :"$path")
git rm --cached "$path"
git read-tree -i --prefix="$path/" $subcommit
' >/dev/null
}
while git ls-files -s | grep -q ^160000; do
read_one_level
done
git …Run Code Online (Sandbox Code Playgroud) 我有一个git存储库.gitattributes:
my_script.py export-subst
Makefile export-ignore
README.md export-ignore
.gitattributes export-ignore
.gitignore export-ignore
hooks/ export-ignore
tests/ export-ignore
*.pyc export-ignore
Run Code Online (Sandbox Code Playgroud)
但当我做:
git archive HEAD | tar -x -C ../archive_dir
Run Code Online (Sandbox Code Playgroud)
在archive_dir目录中,我得到目录hooks和tests:
ls ../archive_dir/
hooks/ my_script.py tests/
Run Code Online (Sandbox Code Playgroud)
为什么?
我的git版本是1.7.9.
给定一个带有两个文件的单个提交的简单测试存储库,a并且b,我可以获得特定文件的列表:
$ git ls-files a
a
Run Code Online (Sandbox Code Playgroud)
或者除特定文件之外的所有文件的列表:
$ git ls-files . ':!b'
a
Run Code Online (Sandbox Code Playgroud)
我可以创建特定文件的存档:
$ git archive HEAD a | tar tf -
a
Run Code Online (Sandbox Code Playgroud)
但我无法创建除特定文件之外的所有文件的存档:
$ git archive HEAD . ':!b' | tar tf -
a
b
Run Code Online (Sandbox Code Playgroud)
在我的真实存储库中,使用特定文件存档的选项不是我的选项,因为它超出了最大命令行参数长度.
我知道我可以.gitattributes通过export-ignore属性存储要排除的文件列表,但列表是动态生成的.我可以自动更改文件,但更改不会在另一次提交之后被提取.
是否有其他调用无需另外提交即可运行?
我正在构建自己的rpm.通常我使用git archive从我感兴趣的提交或标记中获取tarball(假设我已经添加了标记1.0):
git archive --format=tgz --prefix=product-1.0 1.0 > product-1.0.tgz
Run Code Online (Sandbox Code Playgroud)
假设现在我正在做一些我尚未提交的本地开发项目,我想获得一个档案; 有没有办法获得这个而不必提交?
编辑我可以使用这样的东西:
tar cf product-1.0.tgz --exclude=.git
Run Code Online (Sandbox Code Playgroud)
但是这将包括我不喜欢的所有二进制文件和其他未跟踪的文件...
我需要创建一个我的Git项目的存档,忽略并省略指定的文件.gitignore,但包括实际的.git存储库文件夹.只需运行git archive master就会遗漏.git文件夹.
有没有办法让git archive包含.git文件夹但仍然忽略指定的文件.gitignore?
git-archive ×10
git ×9
export ×1
git-branch ×1
git-checkout ×1
git-tag ×1
subdirectory ×1
svn-export ×1