【问题标题】:Can I use the files present after a git clone?我可以使用 git clone 后存在的文件吗?
【发布时间】:2014-08-26 23:22:31
【问题描述】:

我正在尝试了解一个 make 问题,但我不确定发生了什么。我不确定我遇到的是 make 问题还是 git 问题。

如果我执行:

$ git clone git://git.openssl.org/openssl.git openssl-git

然后我得到了似乎是 OpenSSL 的源文件:

$ cd openssl-git
$ ls
ACKNOWLEDGMENTS INSTALL.VMS     README          demos       os2
CHANGES         INSTALL.W32     README.ASN1     doc         perl
CHANGES.SSLeay  INSTALL.W64     README.ECC      e_os.h      shlib
Configure       INSTALL.WCE     README.ENGINE   e_os2.h     ssl
...

这些文件看起来一模一样,就像我下载 OpenSSL 压缩包并解压缩时得到的一样。

那些文件可用吗?我不能对他们执行make 吗?


我问这样一个简单问题的原因是:我打开Configure,修改其中一条配置行,然后执行清理、配置和制作。随后 make 失败。当我询问它时,我被告知我没有正确使用 git。

有人告诉我 make 没问题,但我使用 git 不正确(来自 OpenSSL 测试邮件列表):openssl-dev, link error [heartbeat_test] Error 2

这里有人告诉我我使用 git 不正确(来自 Stack Overflow):Why does deleting a conflicted file break a project?

注意:我在两个 SO 问题中都遇到了同样的问题,除了这个问题使用了新的克隆。


# Standard checkout
git clone git://git.openssl.org/openssl.git openssl-git
cd openssl-git

# This is a false start. A config is needed to create a Makefile
export KERNEL_BITS=64
./config

# Clean up developer checked-in cruft
make clean && make dclean
# Open Configure, find debug-darwin64-x86_64-cc, change -g2 to -g3

./Configure debug-darwin64-x86_64-cc no-ssl2 enable-ec_nistp_64_gcc_128
make depend
make

...
duplicate symbol _main in:
    heartbeat_test.o
    testutil.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [link_app.] Error 1
make[1]: *** [heartbeat_test] Error 2
make: *** [build_tests] Error 1

我也可以将./Configure debug-darwin64-x86_64-cc no-ssl2 enable-ec_nistp_64_gcc_128 更改为./config no-ssl2 enable-ec_nistp_64_gcc_128,结果相同。 export KERNEL_BITS=64 确保我获得 64 位 Darwin 配置 (darwin64-x86_64-cc)。

【问题讨论】:

  • 我不明白您所说的“我正在遭受断开连接”的意思。它向我表明git clone 失败了,但是阅读您的其余问题,我认为没有。你能澄清一下你的意思吗?
  • "Make 随后失败" 你运行什么命令?你得到什么错误?我认为这里的问题在于您如何运行config 和/或make,而不是git
  • @hvd: “我不明白你所说的'我正在遭受断开连接'是什么意思”。 - 我被告知我没有使用 git正确。但是我看不到我是如何错误地使用 git 的。我似乎正在遭受严重的脱节。
  • @jww 哦,我明白你现在的意思了。这不是“断开连接”这个词的常见用法,它几乎总是指网络连接。感谢您的澄清。我无法判断它是否会同样让其他人感到困惑,但如果你认为可能是,你可能想改写你的问题。
  • @jww 是的,你是对的。当我尝试与您在评论中包含的完全相同的命令时确实看到完全相同的错误消息后,我删除了我的评论,而没有任何本地更改。

标签: openssl makefile git-clone


【解决方案1】:

您应该能够使用该克隆来执行make

但请注意INSTALL 建议使用./config,而不是直接使用Configure
你可以修改Configure,但你应该在后面加上./config,而不是./Configure(除非你想为你的操作系统手动配置OpenSSL)。

【讨论】:

  • 感谢 VonC。 configConfigure 都出现同样的错误。我认为问题出在某个 Makefies 中,而不是 git。我很沮丧,因为我一直被告知我使用 git 的方式。
【解决方案2】:

您是对的,问题根本不在于您使用 Git,而在于 OpenSSL Makefile。问题是make dclean 删除了所需的文件。在你运行make dclean 之后,git status 将显示test/ 目录中的一些C 文件已被删除。在这些文件被删除后恢复它们就足以使其正常工作:

git checkout -- 'test/*.c'

让人们失望的是,您使用 Git 的方式通常不建议使用(但实际上可能很常用),而且方式很容易导致非常相似的问题。但是,就像您在此处的 cmets 中所做的那样,向其他人表明问题不在于 Git 的简单方法是以不依赖任何可疑 Git 命令的方式来解释真正的问题。在您的问题中,您已经显示了导致错误消息的确切命令,可以在 git clone 之后直接运行,无需任何进一步的用户输入。我怀疑如果你在那里做同样的事情,你会收到对其他问题更有用的答案。

【讨论】:

  • 谢谢@hvd。所以我们在同一页面上:我不进行结帐 - 我使用来自 OpenSSL 的 ONE TRUE SOURCES。 OpenSSL 不像内核。 OpenSSL 有一个真正的来源。他们的单源模型更适合颠覆,但他们不使用它。
  • @jww 链接错误,这是我确实发布了答案的问题。我的答案的前半部分并不是你在这里问的,而且,我认为,也不是你在其他 SO 问题中问的。这是您在 OpenSSL 邮件列表中询问的内容,但我不想在那里发帖。 :) 我的答案的后半部分似乎比你的其他 SO 问题更适合我,所以我很乐意保持原样。
  • 第二次尝试(使用正确的链接)...您想通过Why does deleting a conflicted file break a project 提供答案吗?我想这就是你回答的问题。我认为即使在这种情况下你也值得称赞。
  • 对了,你是怎么找到的"...问题是make dclean删除了需要的文件"。在dclean 之后,git diff 太大了,它没用了。在尝试解决此问题时,我打开了一个错误报告。 Bug #3492: Make dclean creates a 630K+ git diff.
  • @jww 没有登录是看不到的,而且我在那里没有帐户,但是因为我已经怀疑某些不应该被删除的东西(从dclean 开始)是删除东西),我只需要查看git status的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多