从远程回购克隆写入git目标文件

时间:2019-02-01 21:51:51

标签: git

我已经为这个问题努力了几个小时。我的本地仓库在某种程度上缺少提交

jQuery.getJSON('https://ipinfo.io', function(data){
    if(data){
        if(data.country){
            if(data.country.toLowerCase()=='us')
            {
                window.location.replace(window.location.href+"?location=us");
            }
        }
    }
});

//works when page is not reloaded
document.addEventListener("DOMContentLoaded",
   function() {
    doSomething...
});

> git reflog expire --stale-fix --all
error: refs/tags/12.01.02 does not point to a valid object!
error: Could not read 95eeac3b5f441c9ebbd89508896c572e3eb17205
fatal: Failed to traverse parents of commit 6c24f6ea7c0452e70dea6332c6959dad6c71305f

我一直在解决有关问题的问题。具体来说,我遇到了this answer

  

您可以尝试的第一件事是从备份中还原丢失的项目。例如,查看是否有保存为.git / objects / 98 / 4c11abfc9c2839b386f29c574d9e03383fa589的提交的备份。如果是这样,您可以将其还原。

因此,我发现提交在GitHub上的远程目录中。因此,我在另一个目录中进行了新克隆,但是$ git fsck --full Checking object directories: 100% (256/256), done. Checking objects: 100% (159800/159800), done. error: refs/tags/12.01.02: invalid sha1 pointer 95eeac3b5f441c9ebbd89508896c572e3eb17205 error: HEAD: invalid reflog entry 95eeac3b5f441c9ebbd89508896c572e3eb17205 大部分为空。有没有一种方法可以仅一次提交就重新生成对象文件?

3 个答案:

答案 0 :(得分:4)

如果您发现该提交在远程中,那么最简单的方法可能是获取该提交(这还会拉入任何相关对象,例如提交的内容或构成该提交历史的其他提交)提交)。

您可能不能取特定直接从远程提交,因为任意提交ID的不普遍接受作为参数来获取。但你做了一个本地克隆,所以你可以

$ git branch my_temp_branch
$ cd path/of/original/clone
$ git remote add temp file://localhost/path/of/new/clone
$ git fetch temp my_temp_branch

结帐应使您处于分离的HEAD状态,这将打印出冗长的警告和说明;但它应该成功。如果错误,则可能是有关提交在远程(和/或新克隆)中的某些观察结果有误。

假设结帐确实有效,那么您会

#Currently trying with 10, 2, 2, 6, giving a total pop of 10

organisms = int(input("Enter the initial number of organisms:"))
rateOfGrowth = int(input("Enter the rate of growth [a real number > 0]: "))
numOfHours = int(input("Enter the number of hours to achieve the rate of growth: "))
totalHours = int(input("Enter the total hours of growth: "))

totalOrganisms = organisms
while numOfHours >= totalHours:
    organisms *= rateOfGrowth
    totalOrganisms += organisms
    numOfHours += numOfHours
print("The total population is ",totalOrganisms)

(该命令序列有很多变体;该命令使用了足够熟悉的语法,即使没有其他测试实例在我面前,我也可以肯定地说我已经正确了,尽管其他方式可能更简洁)

答案 1 :(得分:2)

来自其他任何地方的新克隆都将在打包文件中包含对象,如果它完全具有对象的话。有关从打包文件中提取一个打包对象的方法,请参见How do I unpack a single git object?

您可能会发现,一旦你的第一个丢失的对象,你需要更多的对象。这在技术上是可以拥有一个对象不止一次(例如,在几个包),只要查找在具有任何包装的对象,并使用结果得到你同样的位在任何其他包,展望了同一个对象也有它。如果存储库是相关的,这应该是这样,所以你能不能别再包文件到“坏”回购添加的所有的它的对象(或许有些多余)。

如果,当你得到的Git是与“坏”克隆OK,这是一个好主意,它再克隆到一个新的克隆(你可能想使用git clone --mirror此)。

答案 2 :(得分:0)

您可以使用git fetch从遥控器获取特定对象。

尝试运行:

git fetch origin 95eeac3b5f441c9ebbd89508896c572e3eb17205

另一个角度是:git fsck的结果表明,唯一失败的是您的 local tag 12.01.02是无效的。

  • 删除此本地标签:git tag -d 12.01.02
  • 如果需要,请从原产地取回:git fetch origin 12.01.02