我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
我尝试通过运行以下命令从远程仓库中删除文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Run Code Online (Sandbox Code Playgroud)
但是Git抱怨说
无法创建新备份.以前的备份已存在于refs/original/
Force中使用-f
rm 覆盖备份:无法删除/.git-rewrite/backup-refs:权限被拒绝
rm:无法删除目录/.git-rewrite:目录不为空
这是在我已经删除了Windows上的.git-rewrite目录之后.
我该如何删除该文件?这是一个29Mb的文件,坐在我的仓库,所以我非常需要删除该文件.
我试图删除提交git rebase -i,但显然因为提交触及了很多不同的文件,Git抱怨冲突,我流产是安全的.
我发现BFG比原来的git-filter-branch快得多.
我们有多个svn repo移动到更多的git存储库,这意味着一些存储库文件夹合并和拆分.在此过程中,我需要删除一组根文件夹,我想将其删除到整个历史记录中.
我试图使用BFG --delete文件夹,它适用于单个文件夹,但我没有找到删除多个文件夹的方法.它甚至可能吗?或者我应该循环调用BFG多次,因为我要删除文件夹?
谢谢你的帮助.
我一直使用基于接口的git客户端(smartGit),因此对git控制台没有多少经验.
但是,我现在需要在历史记录中替换所有.txt文件中的字符串(因此,不要删除整个文件而只是替换字符串).我找到了以下命令:
git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#(PASSWORD1|PASSWORD2|PASSWORD3)#xXxXxXxXxXx#g"' -- --all
Run Code Online (Sandbox Code Playgroud)
我试过这个,不幸的是注意到密码确实发生了变化,所有二进制文件都被破坏了.图像等都会被破坏.
有没有更好的方法来做到这一点,不会破坏我的二进制文件?
谢谢.
编辑:
我搞砸了什么.导致二进制文件损坏的实际代码是:
$ git filter-branch --tree-filter "find . -type f -exec sed -i -e 's/originalpassword/newpassword/g' {} \;"
Run Code Online (Sandbox Code Playgroud)
顶部的代码实际上使用我的密码奇怪地删除了所有文件.
git version-control substitution git-filter-branch git-rewrite-history
我有一个git repo,里面有一些非常大的二进制文件.我不再需要它们,我不关心是否能够检查早期提交的文件.因此,为了减少repo大小,我想从历史中删除二进制文件.
在网络搜索之后,我得出结论,我最好的(仅?)选项是使用git-filter-branch:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Run Code Online (Sandbox Code Playgroud)
到目前为止,这似乎是一个好方法吗?
假设答案是肯定的,我还有另外一个问题需要解决.该git的手册中有这样的警告:
警告!重写的历史将具有所有对象的不同对象名称,并且不会与原始分支会聚.您将无法在原始分支的顶部轻松推送和分发重写的分支.如果您不知道完整的含义,请不要使用此命令,并且无论如何都要避免使用它,如果简单的单个提交就足以解决您的问题.(有关重写已发布历史记录的详细信息,请参阅git-rebase(1)中的"从上游重新恢复"部分.)
我们的服务器上有一个远程仓库.每个开发人员都会推动并从中拉出.基于上面的警告(以及我对git-filter-branch工作原理的理解),我认为我不能git-filter-branch在本地副本上运行然后推送更改.
所以,我暂时计划完成以下步骤:
这听起来不错吗?这是最好的解决方案吗?
实现Android身份验证器通常涉及两项服务 - 用于返回身份验证器的身份验证服务,以及提供同步适配器的同步服务.这个问题具体是关于身份验证服务,尽管在大多数示例中, 两个服务都被赋予了android:exported="true"属性AndroidManifest.xml,例如:
<service
android:name=".authenticator.AuthenticationService"
android:exported="true">
<intent-filter>
<action
android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
Run Code Online (Sandbox Code Playgroud)
从身份验证服务中删除属性似乎没有效果(测试Froyo,Gingerbread) - 身份验证代码继续正常工作 - 标志实际上是否必要?
这是一个自定义复合组件,可以扩展RelativeLayout和扩展xml中的特定布局:
public class MyCustomView extends RelativeLayout {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.my_custom_view, this);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
布局xml使用<merge>标记(从视图层次中移除不必要的层,yada yada yada):
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" ... />
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" ... />
...
</merge>
Run Code Online (Sandbox Code Playgroud)
...我在其他布局中使用自定义视图,如下所示:
<com.example.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dip" />
Run Code Online (Sandbox Code Playgroud)
自定义视图中的一切都一尘不染摆出来,但20dip填充应该围绕整个事情并不适用.如果我把它放在<merge>标签上它似乎不起作用.缺少填充使得它看起来完全糟糕.我应该在哪里放置android:padding="20dip"属性来应用它?
最简单的事情可能就是进行MyCustomView扩展FrameLayout,并用- 替换<merge>标签<RelativeLayout>- 但这会牺牲整个"保持视图层次结构浅"的东西,Romain Guy如此认真对待:)
我想显示一个只读的文本块作为HTML页面的一部分 - 实际上,它将是用户的Git提交消息的等宽文本 - 虽然我想显示没有包装的文本,我会喜欢显示72个字符的垂直线长指南,因此当用户的线条超过推荐长度时,用户会清楚.
在某些情况下,用户将输入比视口宽得多的文本行.
我可以用CSS实现这种效果吗?
(顺便说一句,我并没有大力支持文本包装指南,但我的用户需要了解它们)
我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境.我将更改有问题的信息,以从未包含在存储库中的配置文件加载.我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?
编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然使用.相反,我想删除/删除/更改其中某些字符串的出现.
Apple应用内购买transaction_ids是否仅对于给定的应用或产品是唯一的,还是它们实际上是全球唯一的?
示例:如果1000000019169002应用程序A存在transaction_id(例如),那么对于第二个应用程序B,是否可以针对不同的事务再次返回该transaction_id?