小编Rob*_*ley的帖子

从Git历史记录中删除敏感文件及其提交

我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).

我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.

我也不想通过删除/.git目录重新开始.

有没有办法删除Git历史记录中特定文件的所有痕迹?

git git-filter-branch git-commit git-rewrite-history

330
推荐指数
9
解决办法
10万
查看次数

从Git repo清除文件失败,无法创建新备份

我尝试通过运行以下命令从远程仓库中删除文件:

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抱怨冲突,我流产是安全的.

git git-filter-branch git-commit git-rewrite-history

104
推荐指数
3
解决办法
4万
查看次数

BFG删除多个文件夹

我发现BFG比原来的git-filter-branch快得多.

我们有多个svn repo移动到更多的git存储库,这意味着一些存储库文件夹合并和拆分.在此过程中,我需要删除一组根文件夹,我想将其删除到整个历史记录中.

我试图使用BFG --delete文件夹,它适用于单个文件夹,但我没有找到删除多个文件夹的方法.它甚至可能吗?或者我应该循环调用BFG多次,因为我要删除文件夹?

谢谢你的帮助.

git-rewrite-history bfg-repo-cleaner

37
推荐指数
1
解决办法
8318
查看次数

如何替换git历史文件中的文本?

我一直使用基于接口的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

35
推荐指数
5
解决办法
1万
查看次数

使用重写的Git repo历史记录更新开发团队,删除大文件

我有一个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在本地副本上运行然后推送更改.

所以,我暂时计划完成以下步骤:

  1. 告诉我的所有开发人员提交,推送和停止工作.
  2. 登录服务器并在中央存储库上运行过滤器.
  3. 让所有人删除旧副本并从服务器再次克隆.

这听起来不错吗?这是最好的解决方案吗?

git project-planning git-filter-branch git-rewrite-history

32
推荐指数
3
解决办法
1万
查看次数

android:exported ="true"对于身份验证服务真的有必要吗?

实现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) - 身份验证代码继续正常工作 - 标志实际上是否必要?

authentication android android-manifest

22
推荐指数
1
解决办法
3万
查看次数

使用自定义复合组件使用<merge>标记丢失填充

这是一个自定义复合组件,可以扩展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如此认真对待:)

merge android custom-controls padding

17
推荐指数
1
解决办法
2517
查看次数

在非包装文本区域上显示行长指南

我想显示一个只读的文本块作为HTML页面的一部分 - 实际上,它将是用户的Git提交消息的等宽文本 - 虽然我想显示没有包装的文本,我喜欢显示72个字符的垂直线长指南,因此当用户的线条超过推荐长度时,用户会清楚.

在某些情况下,用户将输入比视口宽得多的文本行.

我可以用CSS实现这种效果吗?

(顺便说一句,我并没有大力支持文本包装指南,但我的用户需要了解它们)

html css textarea word-wrap

14
推荐指数
2
解决办法
879
查看次数

从旧的Git提交中删除私人信息

我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境.我将更改有问题的信息,以从未包含在存储库中的配置文件加载.我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?

编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然使用.相反,我想删除/删除/更改其中某些字符串的出现.

git security git-rewrite-history

13
推荐指数
2
解决办法
886
查看次数

Apple在应用内购买transaction_id是全球唯一的吗?

Apple应用内购买transaction_ids是否仅对于给定的应用或产品是唯一的,还是它们实际上是全球唯一的?

示例:如果1000000019169002应用程序A存在transaction_id(例如),那么对于第二个应用程序B,是否可以针对不同的事务再次返回该transaction_id?

in-app-purchase ios

12
推荐指数
2
解决办法
7440
查看次数