【问题标题】:Delete git repo and tracked files删除 git repo 和跟踪文件
【发布时间】:2020-11-18 05:47:08
【问题描述】:

我有一个 git repo,其中包含以下内容(简化):

-- .git/
-- data/
   |_ bar.txt
-- src/
   |_ foo.py
-- .gitignore

.gitignore 只忽略数据目录。因此,在这种情况下,src/foo.py.gitignore 被暂存并提交。

我想删除 .git 存储库和 git 跟踪的所有文件/文件夹而不删除整个目录,因为我想保留未跟踪的文件(即删除 src/foo.py.gitignore.git,但保留data 文件夹及其内容)。

我查看了git clean 并尝试搜索堆栈溢出,但我似乎找不到答案。

注意:上面的 repo 只是作为一个例子,我关心的实际 repo 要复杂得多。

【问题讨论】:

    标签: git


    【解决方案1】:

    在 bash shell 中:

    for f in $(git ls-tree -r HEAD --name-only); do;
        echo rm -rf $f
    done
    echo rm -rf .git
    

    删除回声以使这实际上破坏所有文件。我不想让任何人盲目地粘贴并后悔,所以我保留了它们。

    【讨论】:

      【解决方案2】:

      想通了。从this post,您可以运行以下命令来(逐行)列出当前 git HEAD 跟踪的所有文件。

      git ls-tree -r HEAD --name-only
      

      从那里它应该像使用rm 命令将输出传送到xargs 一样简单:

      git ls-tree -r HEAD --name-only | xargs rm
      

      然后,删除.git 文件夹:

      rm -rf .git
      

      多合一命令:

      git ls-tree -r HEAD --name-only | xargs rm && rm -rf .git
      

      注意:这只会删除文件,因为 git 不跟踪文件夹,这意味着您仍然会有剩余的空目录(在这种情况下,src/foo.py 将被删除,但 @987654330 @ 目录本身将是剩余的)。

      【讨论】:

      • 如果当前签出不同的分支,这将不起作用(您需要将master替换为HEAD
      • @Omer,哎呀,你是对的,那是正确的。修正了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 2015-08-01
      • 2022-01-27
      • 2014-02-12
      • 2016-02-27
      • 2017-05-10
      • 2019-04-19
      相关资源
      最近更新 更多