我不确定这是否是Git所支持的东西,但理论上它似乎应该对我有用.
我的工作流程通常涉及我同时在多个分支中编辑文件.换句话说,我经常想在一个分支中打开一些文件,而我在另一个分支中编辑另一个文件的内容.
我的典型解决方案是进行两次检查,但遗憾的是我不能在它们之间共享分支和引用.我想要的是只有两个工作目录由同一个.git文件夹管理.
我知道本地git clone解决方案(默认情况下,硬链接共享对象,以及--shared选项,它使用原始repo设置备用对象存储),但这些解决方案只减少了磁盘空间使用量,特别是在--shared的情况下,似乎充满了危险.
有没有办法使用一个.git文件夹,并有两个工作目录由它支持?或者是Git硬编码只是随时检查一个工作目录?
我理解每次更改文件时更新修改时间的默认Git行为,但有时我想恢复文件的原始修改时间.
有没有办法告诉Git这样做?
(例如,在处理大型项目时,我做了一些更改configure.ac,发现autotools在我的系统上不起作用,并希望将其恢复configure.ac到原始内容和修改时间,这样make就不会尝试configure用我破损的autotools 更新.)
当我使用" git clone ..."命令克隆git存储库时,我本地存储库中的所有克隆文件都具有相同的修改时间,其中包含git clone发出命令的日期和时间.
有没有办法克隆远程git存储库与每个文件的实际修改时间?
我已经将我正在使用的脚本发布到StackExchange Code Review站点.
我原来的问题是,有没有办法可以使用X.509证书和时间戳签署Git提交?.有一段时间我以为我只能用我的X.509证书签署的东西,我的X.509证书由一个受信任的第三方加盖时间戳.不是这种情况.使用X.509证书和可信时间戳进行数字签名是互斥的.我已更新我的问题以反映这一点.
正如VonC所指出的那样,使用X.509证书签署Git提交不会增加任何价值.由于Git内置支持,使用GPG密钥是一个更好的选择.
我已经接受了格雷格的回答,因为它与我要求的最接近,即使我原来的问题有点含糊不清.正如Greg指出的那样,如果你能证明你在某个时间点知道提交哈希,那么这可以保证你知道当时哈希所用的存储库内容,并且不需要在存储库中存储任何额外的数据.时间戳数据可以存储在任何地方.
可以使用openssl(v1.0.0 +)并curl为提交哈希请求RFC3161时间戳.
你需要有一些信息:
CONTENT_TYPE="Content-Type: application/timestamp-query"
ACCEPT_TYPE="Accept: application/timestamp-reply"
openssl ts -query -cert -digest "$REV" -sha1 \
| curl -s -H "$CONTENT_TYPE" -H "$ACCEPT_TYPE" --data-binary @- $URL
Run Code Online (Sandbox Code Playgroud)
以上将输出签名的时间戳stdout.如果时间戳服务拒绝请求,它也可能输出错误.
这与请求时间戳非常相似,但您还需要:
时间戳服务应该使用由受信任的颁发机构颁发的证书签署时间戳.如果没有,你的时间戳没有太大的可信度.如果找不到或创建正确的证书链,请尝试使用cacert.pem发布的curl.就在这里.
以下代码段假定正在传递现有的签名时间戳回复stdin.应该可以将上述请求直接传递给下面的verify命令.如果将请求中的响应存储在变量中,则可能需要对其进行base64编码/解码(man base64).
openssl ts -verify -digest "$REV" -in /dev/stdin -CAfile "$CAFILE"
Run Code Online (Sandbox Code Playgroud)
如果您检查回复,您会注意到请求摘要与使用的Git修订版匹配.您可以使用此命令检查答复的纯文本版本. …
我想列出git存储库中大量文件的最后提交日期.
为了具体起见,让我们假设我想获取*.txt特定子目录中所有文件的最后提交日期.存储库中总共有数万个文件,相关*.txt文件的数量在数百个.存储库中已有数千个提交.
我尝试了三种不同的方法.
解答1. 这个问题给出了一个答案,基于git log.但是,如果我尝试做这样的事情,那就很慢了:
find . -name '*.txt' |
xargs -n1 git log --format=format:%ai -n1 --all -- '{}'
Run Code Online (Sandbox Code Playgroud)
在我的测试案例中,花了几分钟 - 对我来说太慢了.
解决方案2.这样的事情要快得多,不到一秒钟:
git log --format=format:%ai --name-only .
Run Code Online (Sandbox Code Playgroud)
但是,我必须编写一个后处理输出的脚本.此外,上面的命令打印出许多永远不需要的信息:无关文件和旧提交.
解决方案3.我也试过这样的东西,以摆脱不相关的文件:
git log --format=format:%ai --name-only `find . -name '*.txt'`
Run Code Online (Sandbox Code Playgroud)
然而,事实证明这比解决方案2 慢.(运行时间有3个不同.)此外,它仍然会打印不再需要的旧提交.
题.我错过了什么吗?有快速方便的方法吗?当我们提交更多数量的提交时,最好是现在还是将来工作的东西?
我经常在分支之间来回切换.我有一个脚本,它将结帐的内容推送到"运行"环境,在那里我可以看到代码运行并测试它(它是一个Web应用程序).此推送脚本的核心使用rsync,它使用时间戳来检测应该传输哪些文件.因为git-checkout似乎将文件的时间戳设置为当前时间,所以rsync报告所有文件都被推送,只是因为时间戳将被更新.
如何在分支之间切换时让git-checkout保留时间戳,以便rsync仅报告内容更改?
我不想使用rsync的校验和参数,因为它非常慢.
如何在新机器上从服务器获取源代码的副本,但保留文件时间戳?
使用以下过程,所有时间戳都设置为当前日期/时间.
hg init是否有选项或不同的程序来保存时间戳?
在这个具体案例中,使用Kiln with TortoiseHg.
我试图找到命令以获取本地git存储库中文件的最后修改日期。
创建了仓库,并完成了一次提交。不得不编辑一个文件并将提交此文件,但想知道存储库中文件的最后修改数据是什么(不是提交日期)。
没有gui onl命令行。
git log ./path/to/filename.php
Run Code Online (Sandbox Code Playgroud)
只给我提交日期
我可以使用GitHub v3 API获取文件内容(如果它是文件夹,我可以获取文件列表). 例:
https://api.github.com/repos/[Owner]/[Repository]/contents/[Folder]
Run Code Online (Sandbox Code Playgroud)
但是如何知道文件上次更新的时间?那有API吗?