我正处于我想要开源我的项目的情况,但是我想要发布一个"干净"版本的单个源文件,但在本地使用单独的版本.git有一个功能,我可以只提交一次文件,从现在开始它停止查找该文件的更改?
我试图加入的.gitignore文件,但是当我做了第一次后git add -f,并git commit在文件上,我进行再次编辑,git status文件显示为改变.理想的行为是git不会显示此文件从现在开始改变,即使我已经编辑过它.
我也对其他人如何处理"擦洗"他们的私有代码/数据代码库之前感兴趣,然后推送到开源代码库,特别是在Git上.
Gre*_*ill 19
你可以使用Git的稀疏结账功能来完成这项工作.在repo中运行以下命令,您需要一个特殊的未跟踪local.txt文件:
git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!local.txt' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD
Run Code Online (Sandbox Code Playgroud)
这将首先删除现有local.txt文件.但现在从Git的角度来看它被忽略了,所以你可以把机器专用的那个放在那里,Git不会打扰你.
然后,您可以local.txt从其他存储库添加和管理已发布的文件.Git很乐意跟踪这个文件并将其保存在存储库中,但是在具有上述稀疏checkout配置的机器上,Git将忽略该local.txt工作目录中的本地文件,即使它与存储库中的文件不同.
使用update-index,这是文档.
这是冻结文件的基本示例foo.rb:
git update-index --assume-unchanged foo.rb
Run Code Online (Sandbox Code Playgroud)
然后,把它拿回来:
git update-index --no-assume-unchanged foo.rb
Run Code Online (Sandbox Code Playgroud)
或者为简单起见,将其添加到 .gitconfig
freeze = update-index --assume-unchanged
thaw = update-index --no-assume-unchanged
...
git freeze foo.rb
git thaw foo.rb
Run Code Online (Sandbox Code Playgroud)
注意:此答案最初由@TheAmpersand在上面的评论中提供.我认为形式化很重要.
格雷格的方法非常充分,准确地回答了你的问题.
让我做一个补充,考虑到我推断的高级目标:
最简单的(以我的经验,最好的证明)方法来实现这一点是使用以下结构:
./application.code
./config.code
./config.local.code.sample
./.gitignore
Run Code Online (Sandbox Code Playgroud)
application.code
include('./config.code')
if is_file('./config.local.code')
include('./config.local.code')
end
Run Code Online (Sandbox Code Playgroud)
config.code
username = 'root'
password = 'password'
Run Code Online (Sandbox Code Playgroud)
config.local.code.sample
username = 'replace with your local username and rename file to config.local.code'
password = 'replace with your local password and rename file to config.local.code'
Run Code Online (Sandbox Code Playgroud)
的.gitignore
config.local.code
Run Code Online (Sandbox Code Playgroud)
./config.local.code # will not be picked up by git due to .gitignore
Run Code Online (Sandbox Code Playgroud)
config.local.code
username = 'Suan'
password = 'myownpass'
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,您可以避免将config.local.code实际包含敏感信息的内容释放到野外.默认配置(直接从远程克隆)将适用于用户名root和密码password有效的合理(如果罕见)情况.适当命名config.local.code.sample提供本地自定义指令.
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |