一个很好而且简单的问题 - "git fetch"的功能是一个严格的子集git fetch --tags吗?
即如果我跑git fetch --tags,有没有理由立即直接跑git fetch?
怎么样git pull和git pull --tags?同样的情况?
我正在尝试解决大型目录结构上的gitignore问题,但为了简化我的问题,我已将其减少到以下内容.
我在一个全新的git存储库中有两个文件(foo,bar)的以下目录结构(到目前为止没有提交):
a/b/c/foo
a/b/c/bar
Run Code Online (Sandbox Code Playgroud)
显然,'git status -u'显示:
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个.gitignore文件,忽略/ b/c中的所有内容但不忽略文件'foo'.
如果我创建一个.gitignore:
c/
Run Code Online (Sandbox Code Playgroud)
然后'git status -u'显示foo和bar都被忽略:
# Untracked files:
...
# .gitignore
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
现在,如果我为foo添加排除规则,那么:
c/
!foo
Run Code Online (Sandbox Code Playgroud)
根据gitignore手册页,我希望这可行.但它没有 - 它仍然忽略了foo:
# Untracked files:
...
# .gitignore
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
c/
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
这也不是:
c/*
!foo
Run Code Online (Sandbox Code Playgroud)
得到:
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
在这种情况下,虽然不再忽略foo,但也不会忽略bar.
.gitignore中规则的顺序似乎也不重要.
这也不符合我的期望:
a/b/c/
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
那个人忽略了foo和bar.
一种有效的方法是,如果我创建文件a/b/c/.gitignore并放入其中:
*
!foo
Run Code Online (Sandbox Code Playgroud)
但问题是最终在/ b/c下会有其他子目录,我不想在每一个中都放一个单独的.gitignore - 我希望创建'基于项目'.gitignore可以位于每个项目的顶级目录中的文件,并覆盖所有"标准"子目录结构.
这似乎也是等价的:
a/b/c/*
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
这可能是我可以实现的最接近"工作"的东西,但需要说明完整的相对路径和明确的异常,如果我在不同级别有很多名为'foo'的文件,那将会很痛苦子目录树的.
无论如何,要么我不太明白排除规则是如何工作的,要么当目录(而不是通配符)被忽略时它们根本不起作用 - 以一个以/结尾的规则
任何人都可以对此有所了解吗?
有没有办法让gitignore使用像正则表达式那样合理的东西而不是这种笨拙的基于shell的语法? …
有没有办法,实际上没有检查父提交,根据父克隆中的提交ID确定子模块的SHA-1提交ID?我知道我可以通过'git submodule'找到当前关联的SHA-1.
这是一个例子:我有一个带有单个子模块'foo'的克隆,它在上个月已经改变了好几次.我在父克隆中有一个标签,这个标签是几个星期,叫做'release-1.2.3'.我想知道'foo'的关联SHA-1对于这个标记的提交是什么.我可以简单地检查'release-1.2.3'并使用git-submodule来查看,但我想知道是否有办法在不影响工作树的情况下执行此操作,因为我想编写脚本.
我想这样做是因为我想构建一个脚本来对父存储库中两个提交之间的子模块中的所有更改执行'diff' - 即"告诉我在这两个提交之间的子模块'foo'中更改了哪些文件'父母."
我已经配置了大量.gitignore文件来从一组约6,000个未跟踪文件中过滤掉许多不同的不需要的文件.我想做的事情git add .时,我有我的过滤列表中寻找我想要的方式.
但是,我想.gitignore暂时禁用过滤器以查看遗留的内容,并确保没有任何重要的意外过滤.
我知道这git-clean包括一个忽略的选项.gitignore files.是否有类似的选择git-status?
我可以通过并删除所有.gitignore文件,进行检查,然后恢复它们,但似乎应该有一个更简单的方法?
我构建了一个 x86 docker 容器,其中包含一个 armv8 gcc 工具链,用于交叉编译我的 C++ 软件。我的想法是,我可以使用 docker 容器交叉编译我的软件,然后将生成的二进制文件传输到 Raspberry Pi。这一切都可以手动完成。
我想做的是以某种方式将其与 JetBrains CLion 集成。我知道 docker 容器可以设置为远程主机(通过 ssh),但这将构建并尝试执行容器内的二进制文件。我想做的是在容器内构建二进制文件,然后将它们部署到备用远程主机(即 Raspberry Pi)以执行,并最终进行调试。
CLion 是否支持合适的工作流程?是否可以配置工具链远程主机和单独的部署远程主机?据我所知,CLion 只允许您为构建选择一个环境(即 CMake 配置),这就是生成的二进制文件最终执行的位置。
我有一些C++代码定义了两个类,A和B.B在构造期间采用A的实例.我用Boost.Python包装了A,以便Python可以创建A的实例以及子类.我想和B做同样的事情.
class A {
public:
A(long n, long x, long y) : _n(n), _x(x), _y(y) {};
long get_n() { return _n; }
long get_x() { return _x; }
long get_y() { return _y; }
private:
long _n, _x, _y;
};
class B {
public:
B(A a) : _a(a) {};
doSomething() { ... };
private:
A _a;
};
Run Code Online (Sandbox Code Playgroud)
在包装B时,我需要弄清楚如何将A的实例传递给B的构造函数.我做了一些挖掘,我找到的解决方案是写一个"转换器"类:
struct A_from_python_A {
static void * convertible(PyObject* obj_ptr) {
// assume it is, for now...
return obj_ptr;
}
// Convert …Run Code Online (Sandbox Code Playgroud) 我想用模板化的类包装符合'void(ClassType :: Function)(ArgType)'类型的成员函数.稍后,我想将ClassType的实例传递给此模板的实例,并让它调用包装的方法:
class Foo {
public:
Foo() : f_(0.0) {}
void set(double v) { f_ = v * 2.1; }
double get() { return f_; }
private:
double f_;
};
template <typename ArgType, typename ClassType, void (ClassType::*Method)(ArgType)>
class Wrapper {
public:
explicit Wrapper(ClassType *cls) : cls_(cls) {}
void do_something(ArgType value) {
(cls_->*Method)(value);
}
private:
ClassType *cls_;
};
#include <iostream>
int main(int argc, char ** argv) {
Foo foo;
Wrapper<double, Foo, &Foo::set> wrapper(&foo);
wrapper.do_something(1.0);
std::cout << foo.get() << std::endl;
// …Run Code Online (Sandbox Code Playgroud) c++ templates member-function-pointers template-meta-programming
我面临的问题是如何传递带参数的命令docker run.问题是docker run不将命令加参数作为单个字符串.它们需要作为单独的一等参数提供docker run,例如:
#!/bin/bash
docker run --rm -it myImage bash -c "(cd build && make)"
Run Code Online (Sandbox Code Playgroud)
但是请将命令和参数视为变量的值:
#!/bin/bash -x
DOCKER_COMMAND='bash -c "(cd build && make)"'
docker run --rm -it myImage "$DOCKER_COMMAND"
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为docker run不理解替换:
+ docker run --rm -it myImage 'bash -c "(cd build && make)"'
docker: Error response from daemon: oci runtime error: exec: "bash -c \"(cd build && make)\"": stat bash -c "(cd build && make)": no such file or directory. …Run Code Online (Sandbox Code Playgroud) 曾经有一种匿名用户(例如脚本)的方法可以通过其 REST API 查询 Jenkins 的某些方面。例如,找出启动特定构建作业的用户的姓名或执行日期。然而,安全模型在过去几年发生了变化,这似乎使这变得更加困难,即使对于只读访问也是如此。
我将 Jenkins 与 ADS 身份验证一起使用。我需要提供对脚本的 API 访问,但我不想使用特定用户的个人 API 令牌(在脚本中硬编码),因为该脚本可能由我组织中的任何人运行,包括作为其他自动化的一部分,而且我不想将其与特定员工联系起来。
相反,我需要一个基于工作的令牌——一个为工作设置的令牌。有一个构建令牌,但我认为这不适用于 REST API。
我想过创建一个特殊的“自动”用户,并为该用户创建一个令牌,但 Active Directory 配置似乎阻止我创建新的 Jenkins 用户。我无法创建新的 AD 用户,因为我在我的组织中根本没有能力这样做。
使用 API 令牌进行匿名访问的最佳方法是什么?此外,有没有办法确保令牌仅提供有限的访问权限 - 例如只读?理想情况下,这样的代币将仅限于一组特定的工作,而不是全球性的。
我已将管道转移到“无阶段”管道,只需使用needs规则并删除所有stage声明即可。
这一切都工作正常,但我注意到我的所有工作现在都出现在一个名为“测试”的阶段下。
这不是一个功能问题,但它确实让开发人员质疑为什么会出现这种情况。有什么方法可以使用云托管的 GitLab 更改此默认阶段名称吗?
是不是就像将所有作业设置stage为相同的值一样简单?看起来有点像黑客,与“stage从 .gitlab-ci.yml 中删除所有关键字”的说明相反。
git ×4
c++ ×2
docker ×2
gitignore ×2
bash ×1
boost ×1
boost-python ×1
clion ×1
deployment ×1
diff ×1
git-fetch ×1
git-status ×1
git-tag ×1
gitlab ×1
jenkins ×1
jenkins-api ×1
linux ×1
pipeline ×1
pull ×1
python ×1
raspberry-pi ×1
shell ×1
templates ×1