Git 如何使用私有分叉或存储库将我的dotfiles公开?
我想公开我的dot文件。我找到了{Yadm](),看起来正是我想要的 我根本不想在版本控制中使用机密数据。我会将其脱机存储在USB记忆棒上的某个位置(ssh密钥、gpg密钥等)。但是,还有其他文件包含我想在公开之前过滤或更改的信息 Yadm还允许我在同一个存储库中拥有,因此我在思考,而不是 拥有专用存储库的原因是,某些文件(如Git 如何使用私有分叉或存储库将我的dotfiles公开?,git,terminal,dotfiles,Git,Terminal,Dotfiles,我想公开我的dot文件。我找到了{Yadm](),看起来正是我想要的 我根本不想在版本控制中使用机密数据。我会将其脱机存储在USB记忆棒上的某个位置(ssh密钥、gpg密钥等)。但是,还有其他文件包含我想在公开之前过滤或更改的信息 Yadm还允许我在同一个存储库中拥有,因此我在思考,而不是 拥有专用存储库的原因是,某些文件(如irc.conf)具有我要替换或清理的字符串。我可能希望包含此文件,但删除包含机密\u irc\u网络的所有行 ~/.weechat/irc.conf:SECRET_IRC
irc.conf
)具有我要替换或清理的字符串。我可能希望包含此文件,但删除包含机密\u irc\u网络的所有行
~/.weechat/irc.conf:SECRET_IRC_NETWORK.addresses = "irc.secret.example.com"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl = on
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl_cert = "~/.weechat/ssl/SECRET_IRC/SECRET_IRC-SECRET_NAME.pem"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl_priorities = "NORMAL:-VERS-SSL3.0"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl_dhkey_size
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl_fingerprint = "SECRET_FINGERPRINT"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.ssl_verify = on
~/.weechat/irc.conf:SECRET_IRC_NETWORK.sasl_username = "SECRET_USERNAME"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.nicks = "SECRET_NAME"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.username = "SECRET_USERNAME"
~/.weechat/irc.conf:SECRET_IRC_NETWORK.realname = "SECRET_NAME"
另一个示例可能是我的iptables规则配置rules6 save
:
~/etc/iptables/rules6-save:-A INPUT -s `2001:MY:SECRET:ASSIGNED:RANGE::/64 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
在它公开之前,我想将2001:MY:SECRET:ASSIGNED:RANGE
替换为2001:db8:AAA:AAA:AAA::/64
。我是如何做到这一点的
我需要提交到公共存储库(红色)还是私有分支(绿色)
我想它是这样工作的:
- 参加私人回购
- 过滤并推送至公共回购(非常小心地检查所有内容是否正确消毒)
或
- Cherry从公众中挑选一些承诺
- 用私有数据进行过滤和合并
- 根据我的研究,如果你在Github/Gitlab上有一个公共存储库,你就不能有一个私有的fork并从中发出任何pull请求。理想情况下,私有的fork应该在我自己的私有服务器上
我怎样才能避免这个问题?我不想让人们知道私有分支的存在。因此,私有分支的任何提交都必须对作者进行消毒
(上图为点文件)
所以我最终解决了这个问题。本质上我使用了YADM的引导选项。我创建了一个引导模板
我创建了一些并用jq阅读了它们。这允许我跳过初始化的某些部分
{
"submodule_init_vim": false,
"run_package_manager": true
}
我对许多配置文件进行了模板化,并将模板数据放入其中
如果您查看我的,您可以看到我是如何在路径中阅读的:
export PATH="{% for v in PATHS | from_json %}{{v.path |join(':')}}{% endfor %}"
它接收来自的数据
这是一个简单的例子,但我对我的孩子也这么做了
我从中读取模板数据的位置
{
"submodule_init_vim": false,
"run_package_manager": true
}
export PATH="{% for v in PATHS | from_json %}{{v.path |join(':')}}{% endfor %}"
[
{"path": ["/usr/local/sbin",
"/usr/local/bin",
"/usr/sbin",
"/usr/bin",
"/sbin",
"/bin",
"/usr/libexec",
"$HOME/.local/bin"]
}
]
{% for v in SSH_HOSTS | from_json %}{%
if v.Host != '' %}Host {{ v.Host }}{%
endif %}{%
if v.Comment != '' %}
{{ v.Comment }}{% endif %}{%
if v.Hostname != '' %}
Hostname {{ v.Hostname }}{%
endif %}{%
if v.Port != '' %}
Port {{ v.Port }}{% endif %}{%
if v.User != '' %}
User {{ v.User }}{% endif %}{%
if v.HostKeyAlgorithms != '' %}
HostKeyAlgorithms {{ v.HostKeyAlgorithms }}{%
endif %}{%
if v.KexAlgorithms != '' %}
KexAlgorithms {{ v.KexAlgorithms }}{% endif %}{%
if v.Ciphers != '' %}
Ciphers {{ v.Ciphers }}{% endif %}{%
if v.MACs != '' %}
MACs {{ v.MACs }}{% endif %}{%
if v.PasswordAuthentication != '' %}
PasswordAuthentication {{ v.PasswordAuthentication }}{% endif %}{%
if v.IdentifyFile != '' %}
IdentityFile {{ v.IdentifyFile }}{% endif %}
{% endfor %}
[
{
"Host":"NSA",
"Comment": "# Compute with world's dick pix",
"Hostname":"203.0.113.1",
"Port": "",
"User": "nsa",
"HostKeyAlgorithms":"",
"KexAlgorithms": "",
"Ciphers": "",
"MACs":"",
"PasswordAuthentication": "",
"IdentifyFile":"~/.ssh/id_ed25519_nsa"
},
{
"Host":"CIA",
"Comment": "",
"Hostname":"203.0.113.2",
"Port": "",
"User": "cia",
"HostKeyAlgorithms":"",
"KexAlgorithms": "",
"Ciphers": "",
"MACs":"",
"PasswordAuthentication": "",
"IdentifyFile":"~/.ssh/id_ed25519_cia"
}
]