我使用git-svn与包含一些C++项目的现有SVN存储库进行交互.subwcrev.exe用作预构建事件来更新C++头文件中的某些字符串(svnversion.h).这些字符串经过硬编译,以形成生成的二进制文件的某些版本信息.
由于subwcrev需要.svn元数据才能工作,因此在git-svn工作副本上使用时,预构建事件将失败.所以我提出了以下bash脚本,我将其用作git存储库的post-commit和post-checkout钩子.该脚本尝试根据git svn info(缓存在本地文件中)的输出执行与subwcrev相同的操作.
#!/bin/sh
if [ ! -f svninfo ] ; then
git svn info > svninfo
fi
revision=`sed -e "/Revision/!d" -e "s/Revision: \(.*\)/\1/" svninfo`
lastchange=`sed -e "/Last Changed Rev/!d" -e "s/Last Changed Rev: \(.*\)/\1/" svninfo`
# Get the last changed date, extract timestamp, replaces dashes with slashes
changedate=`sed -e "/Last Changed Date/!d" -e "s/Last Changed Date: \(.\{19\}\).*/\1/" -e "s!-!\\\\\\/!g" svninfo`
now=`date "+%Y\/%m\/%d %H:%M:%S"`
gitcommit=`git show --abbrev-commit | sed -n -e "s/commit //p"`
for entry in $( find -name …Run Code Online (Sandbox Code Playgroud) 我想创建一个git存储库的备份,用于跟踪svn存储库(使用git-svn).我可以为此目的使用git push --mirror,还是在需要恢复备份时丢失任何与git-svn相关的信息?
在我的项目中,存在对libsomething来自第三方的静态库(从现在开始调用)的依赖性。最近,libsomething已推出另一个版本。我的任务是为我的软件提供对旧版本和新版本的支持。在任何给定时间的运行时仅使用一个版本libsomething,但该版本应该在程序运行之间进行配置。
我在 WinXP 上使用 MSVC2005,第二个目标是准备切换到 Linux 和 GCC。
由于两个版本都libsomething使用相同的符号,因此将它们链接到我的可执行文件中是不可能的,因为两个版本的符号都会在链接时发生冲突。
虽然我可以创建两个可执行文件(一个链接旧版本,另一个使用新版本),但我无法决定在最终部署环境中调用哪个可执行文件(遗留原因)。
libsomething我提出了为每个版本创建动态库包装器并根据某些配置文件在运行时链接它们的想法。对于 MSCV,这意味着要使用LoadLibrary(),GetProcAddress()等,而在 Linux 上我必须使用dlopen()和dlsym()。
我知道使用libtool(即libtldl)正在包装此平台依赖性以使用共享库。这是一条合适的道路吗?有更好的(或者至少是不同的)方法吗?libtldl是否有开源的替代方案?