我的一个同事分叉了我的项目,我们希望将他在单个文件中的更改合并到我的仓库中,保留其历史记录(主要是提交日志).
问题是他在提交中笨拙,所以提交包含来自其他文件的差异,与项目无关(或者需要被拉入原始仓库).
我希望能够做一个"git format-patch"来提取历史记录,但只能用于单个文件(或者两个,.cpp和.hpp文件).我无法为此找到"格式化补丁"的选项.
可能吗?
感谢名单!
我正在使用python来管理一些模拟.我构建参数并使用以下命令运行程序:
pipe = open('/dev/null', 'w')
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)
Run Code Online (Sandbox Code Playgroud)
我的代码处理不同的信号.Ctrl + C将停止模拟,询问我是否要保存,然后正常退出.我有其他信号处理程序(例如强制数据输出).
我想要的是向我的python脚本发送一个信号(SIGINT,Ctrl + C),它将询问用户他想要发送给程序的信号.
阻止代码工作的唯一因素是,无论我做什么,Ctrl + C都将"转发"到子进程:代码将捕获并退出:
try:
<wait for available slots>
except KeyboardInterrupt:
print "KeyboardInterrupt catched! All simulations are paused. Please choose the signal to send:"
print " 0: SIGCONT (Continue simulation)"
print " 1: SIGINT (Exit and save)"
[...]
answer = raw_input()
pid.send_signal(signal.SIGCONT)
if (answer == "0"):
print " --> Continuing simulation..."
elif (answer == "1"):
print " --> Exit and save."
pid.send_signal(signal.SIGINT)
[...]
Run Code Online (Sandbox Code Playgroud)
所以无论我做什么,程序都会收到我只希望我的python脚本看到的SIGINT.我怎样才能做到这一点???
我也尝试过: …
我想从已经存在的repo的子文件夹创建一个单独的repo.
将(移动)子目录分离到单独的Git存储库中就可以显示出来.但是,我无法用它获得一个干净的回购.我最终遇到了新回购的两个问题:
这是我做的:
$ git clone ssh://.../repo.git
$ cd repo
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune
Run Code Online (Sandbox Code Playgroud)
在此之后,我似乎拥有了回购和新历史的原始历史.我输入"git log --all --graph"(或gitk --all)我看到,作为第一个提交,第一个repo的初始提交.然后,图表显示原始repo的完整历史记录,直到最后一次提交.然后,我在第一个上面有一个SECOND历史,显示了我想要的子文件夹的历史.但在历史的那一部分,我只有"主人",没有分支/合并.
"git log",gitk或gitg都只显示"flatten"历史记录:它们不会在子文件夹的展平历史之前显示初始回购的历史记录.
我尝试使用"filter-branch"命令,克隆生成的repo(使用--no-hardlinks),使用:
$ git filter-branch --subdirectory-filter subdirectory -- --all
Run Code Online (Sandbox Code Playgroud)
代替:
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
Run Code Online (Sandbox Code Playgroud)
但结果相同.
我做错了什么或者git坏了吗?我真的没有想法......使用git 1.7.6.谢谢.
编辑:我认为问题可能来自于filter-branch忽略了merge提交的事实,因此给出了没有分支或合并的平面历史记录......
我正在将一个svn repo移植到git(使用来自https://www.negativetwenty.net/redmine/projects/show/svn2git的 svn2git )并且由于svn不跟踪合并,我需要手动编辑.git/info/grafts .为此,我启动gitk,在提交消息中搜索术语"Merge",验证合并提交是否具有正确的祖先并依次填充.git/info/grafts.
我遇到的问题是gitk似乎与"master"分支混淆了.它经常表明主人从一个分支"分叉"并被合并成一个分支后跟,而实际上则相反.
为什么它无法理解master应该尽可能"线性",它应该是从它分叉的分支,而不是相反?这是一个gitk问题还是git repo的历史不完整?似乎"git log --pretty = oneline --graph"能够显示正确的行为,所以我认为它可能是一个gitk问题.
我也尝试过咯咯和qgit,但两者都有问题.我发现giggle的树很难理解(例如,合并是水平的,而在qgit和gitk中它们是倾斜的......)qgit似乎没有显示一些提交(在svn中创建分支的提交在两者中都显示为git提交"git log --pretty = oneline --graph"和gitk,但不是qgit也不是咯咯笑.
请注意,我在测试中使用"gitk --all".
所以我的问题是: - 我如何强制gitk尽可能线性显示master?理想情况下,"左对齐",分支从它分叉,而不是相反."git log --pretty = oneline --graph"似乎正在以正确的方式进行,但是gitk呢?
谢谢!
编辑:截图链接已死.以前说过:
我上传了不同工具的截图:git log,gitk,giggle,qgit
看看"git log"如何显示正在合并到trunk的分支,而gitk显示trunk正在分支中合并.Giggle和qgit显示正确的合并,但是它们经常会丢弃一些提交(创建分支),因此很难手动编辑.git/info/grafts文件.
有人正在向我发送由"git format-patch"生成的补丁.
是否有一个gui(在Linux上)可以打开这些.patch文件?
我尝试了很多差异,但他们所做的就是比较两个现有的文件/文件夹.没有可以显示补丁,除了kompare,它吐出"差异格式错误.有些行无法解析,不会在差异视图中显示." 每次.
我正在尝试yocto(2.0,jethro),我想从头开始构建一个图像core-image-minimal.这很好用.
每个网站都提到build/config/local.conf用我的自定义(部分)修改文件.例如,目标机器(通过MACHINE)或某些全局设置(通过EXTRA_IMAGE_FEATURES).
我还需要修改一些特定的包,其方法是创建一个自定义层.到现在为止还挺好.
我不明白的是如何将我的所有配置"保存"到版本控制.我希望我更改的所有内容都位于我可以提交的文件中,以便其他任何人都可以重现完全相同的构建(甚至可以为该项目做出贡献).几乎所有东西build/config/local.conf都违背了这一目标; 该文件位于"构建"目录下,所以我不能只是克隆一个git repo并启动构建...
它真的是yocto项目的工作方式吗?或者我错过了一个不同的配置文件,我需要放置这些设置?我虽然可以将所有这些放在自定义图层中,但它似乎不起作用......
有什么想法或建议吗?
谢谢!
我正在为我的 CI 创建一个 GitHub Actions 工作流程,我意识到我在重复一些信息。例如,runs-on作业的 定义为ubuntu-18.04and mac-10.14,或strategy/matrix.
我想将这些版本信息集中在 YAML 文件中的某个位置,并且能够引用这些信息而不是多次复制该值。这样我就不会重复自己 (DRY) 并且我可以轻松地在一个位置更改版本值并防止不一致。
不幸的是,我这样做有困难。我虽然可以用于此的方式是env在 YAML 顶部使用全局环境变量并在其他地方引用它。例如,我想替换如下内容:
on: [push, pull_request]
name: CI
jobs:
build:
name: Build
runs-on: ubuntu-18.04
strategy:
matrix:
toolchain:
- 1.2.3
steps:
- run: ./build.sh 1.2.3
package:
name: Package
runs-on: ubuntu-18.04
steps:
- run: ./package.sh 1.2.3
[...]
Run Code Online (Sandbox Code Playgroud)
和:
on: [push, pull_request]
name: CI
env:
UBUNTU_VERSION: 18.04
TOOLCHAIN_VERSION: 1.2.3
jobs:
build:
name: Build
runs-on: ubuntu-${{ env.UBUNTU_VERSION }}
strategy:
matrix:
toolchain:
- …Run Code Online (Sandbox Code Playgroud) 我正在为一个项目构建 Yocto 图像,但这是一个漫长的过程。在我强大的开发机器上,它需要大约 3 个小时,最多可以消耗 100 GB 的空间。
问题是最终图像“不一定”是最终目标;重要的是我的应用程序运行在它之上。因此,yocto 的食谱变化不大,但我的应用程序变化很大。
我想为我的应用程序运行持续集成 (CI) 甚至持续交付 (CD)。但是由于 yocto 构建的大小,现在两者都非常困难。
由于构建没有太大变化,我想以某种方式“缓存”它并将其用于我的应用程序的 CI/CD 和我的 Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在 CI/CD 中使用它的同事共享它。
谢谢!
我正在绘制数据,其中x的范围从-1000到1000.但我只对x = -1和0之间的值感兴趣.
我还想在x对数刻度上绘图.但由于x值是负数,我不能使用xscale("log").我可以使用xscale("symlog"),这是我想要的行为.
不幸的是,"symlog"似乎被打破了.我不能使用值小于2的linthreshx参数(默认值?).但是由于我对从-1到0的x值感兴趣,我必须使用该参数并将其设置为1e-5甚至更小的值.
如果我将linthreshx设置为小于1的值,那么情节会中断.这是一个简单的例子,取自'log'和'symlog'之间的区别?:
import numpy
from matplotlib import pyplot
# Enable interactive mode
pyplot.ion()
# Draw the grid lines
pyplot.grid(True)
# Numbers from -50 to 50, with 0.1 as step
xdomain = numpy.arange(-50,50, 0.1)
# Plots a simple linear function 'f(x) = x'
pyplot.plot(xdomain, xdomain)
# Plots 'sin(x)'
pyplot.plot(xdomain, numpy.sin(xdomain))
pyplot.axis([-60,60,-1.5,1.5])
pyplot.xscale('symlog', linthreshx=0.1)
Run Code Online (Sandbox Code Playgroud)
跑步,你会看到我的意思曲线"回来"......这是结果图像: 
问题似乎是,在x轴上,0实际上是10 ^ 0 = 1,而不是0.放置小于1的东西将使线返回并且轴值是错误的(当用鼠标悬停并获得时x值).
我可能没有使用正确的工具,但如何实现我想要的?我希望x轴看起来像:-10 ^ 2 -10 ^ 1 -10 ^ 0 -10 ^ -1 -10 ^ -2 -10 …
我正在使用 pandoc 将 Markdown 文档转换为 LaTeX。我保存了默认的 LaTeX 模板 ( pandoc -D latex) 并根据我的需要对其进行了修改。
我现在需要更改表格的外观:
我能够使用以下方法更改表格标题(第 1 点)的颜色:
\usepackage{caption}
\DeclareCaptionFont{myColor}{\color[RGB]{40,70,119}}
\captionsetup{labelfont=myColor,textfont=myColor,position=bottom}
Run Code Online (Sandbox Code Playgroud)
但该position选项被忽略(第 2 点。)
我希望能够控制 pandoc 生成的 LaTeX 表的样式。那可能吗?有什么建议吗?
谢谢!
我经常看到我需要遍历一个范围并调用一个拥有其参数所有权的函数的模式。由于该函数拥有其参数的所有权,因此我必须克隆该值。例如:
let a = "hello".to_string();
for i in 0..10 {
print_me(a.clone());
}
fn print_me(s: String) {
println!("{}", s);
}
Run Code Online (Sandbox Code Playgroud)
我想找到一种模式,在该模式中,除了最后一个调用之外,所有调用的值都被克隆,以防止冗余克隆。
最简单的方法是对循环索引添加显式检查:
for i in 0..10 {
if i == 9 {
print_me(a);
} else {
print_me(a.clone());
}
}
Run Code Online (Sandbox Code Playgroud)
但是编译器无法理解模式并抱怨迭代期间移动的值。
我还试图建立一个确实克隆一个迭代器,并使用移动repeat_with(),chain()和once()而关闭cosumes值:
let iter = std::iter::repeat_with(|| a.clone())
.take(9)
.chain(std::iter::once(a))
Run Code Online (Sandbox Code Playgroud)
实现这种模式的最简单方法是什么?
谢谢!
我有一个Rust(1.2)库,我想使用Rust的FFI从Python(3.4)中使用它的函数.我在OSX 10.10优胜美地.
几乎所有函数都将可变切片引用作为输入:
pub fn myfunction<T>(array: &mut [T]) { ... }
Run Code Online (Sandbox Code Playgroud)
然后,我将此函数暴露在除锈之外:
#[no_mangle]
pub extern fn ffi_myfunction(array_pointer: *const libc::int8_t, n: libc::size_t) {
assert!(!array_pointer.is_null());
assert!(n != 0);
let mut to_sort = unsafe {
slice::from_raw_parts_mut(array_pointer as *mut i8, n as usize)
};
myfunction(&mut to_sort);
}
Run Code Online (Sandbox Code Playgroud)
这很好用:使用python的ctypes模块我可以ffi_myfunction()使用numpy数组调用:
#!/usr/bin/env python3
import ctypes
import numpy as np
rustlib = ctypes.CDLL("target/debug/libmylib.dylib")
array = np.arange(5, dtype=np.int8)
rustlib.ffi_myfunction(ctypes.c_void_p(array.ctypes.data), len(array))
Run Code Online (Sandbox Code Playgroud)
我也有生锈的实施libc::int16_t,libc::int32_t以及libc::int64_t和我可以给他们打电话np.int16,np.int32和np.int64.
我有第二组Rust函数,我想从Python调用.这些函数略有不同,因为它们对向量(而不是切片)采用可变引用:
pub fn myotherfunction<T>(array: …Run Code Online (Sandbox Code Playgroud)