相关疑难解决方法(0)

查找具有相似文本的文章的算法

我在数据库中有很多文章(标题,文字),我正在寻找一种算法来找到X最相似的文章,比如Stack Overflow的"相关问题",当你提出问题时.

我尝试谷歌搜索,但只找到关于其他"类似文本"问题的页面,比如将每篇文章与所有其他文章进行比较并在某处存储相似性.因此,我只是在我刚输入的文本上"实时"执行此操作.

怎么样?

language-agnostic string algorithm text similarity

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

如何在文件夹层次结构中将所有git内容向上移动一级?

我有一个git存储库,其结构如下所示:

+--repo.git
|
+----+bootstrap.py
+----+buildout.cfg
+----+.gitignore
+----+webapp
|
+---------+manage.py
+---------+modules
+---------+templates
+---------+static
+---------+...
+---------+...
Run Code Online (Sandbox Code Playgroud)

我想将webapp文件夹的内容向上移动一级.我的结果回购应该是这样的:

+--repo.git
|
+----+bootstrap.py
+----+buildout.cfg
+----+.gitignore
+----+manage.py
+----+modules
+----+templates
+----+static
+----+...
+----+...
Run Code Online (Sandbox Code Playgroud)

我可以通过简单地将webapp目录的所有文件移动一级,删除空webapp目录然后提交更改来完成此操作吗?这会保留webapp目录下文件的提交历史吗?

虽然对很多人来说这是一个非常简单的问题,但我想确定一下.我想要的最后一件事就是喝汤.


我尝试移动文件,但我丢失了提交历史记录,因为git没有真正处理移动或重命名.我知道即使它在日志中显示为新文件,仍然可以使用一些选项查看文件的提交历史记录git log.

根据我的阅读,实现这一目标的最佳方法是使用git-filter.我对shell或git不是很好,所以有人可以告诉我我需要执行上述操作.

git directory

56
推荐指数
6
解决办法
4万
查看次数

git无法检测到重命名

一个分支(refactoringBranch)有一个完整的目录重组.文件被混乱地移动,但内容被保留.

我试图合并: git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change refactoringBranch

git status显示大约一半的文件重命名识别.但是项目中的10000个文件中有一半未被识别为移动.

一个例子是:

# On branch master
# Changes to be committed:

#   deleted:    404.php
#   new file:   public_html/404.php
    ...
#   deleted:    AnotherFile.php
#   new file:   public_html/AnotherFile.php
    ...
#   renamed:    contracts/css/view.css -> public_html/contracts/css/view.css
Run Code Online (Sandbox Code Playgroud)

建议?


史前

重构是在git之外进行的.我做了以下事情:

  1. 创造了refactoringBranch原产地master.
  2. 删除了里面更改的结构refactoringBranch,这意味着我在其他目录中进行了更改,只是将它们复制粘贴到我的git存储库中.
  3. 添加并提交了所有内容然后尝试合并.

这是我的工作流程:

git checkout -b refactoringBranch
cp -R other/place/* ./
git add . -A
git commit -a -m "blabla"
git checkout master
git merge --no-ff …
Run Code Online (Sandbox Code Playgroud)

git

39
推荐指数
7
解决办法
2万
查看次数

Git如何知道该文件已重命名?

Git使用什么算法来确定某些文件是否被重命名?

这就是git status几分钟之前产生的:

在此输入图像描述

标有黄色框的信息不正确.实际上没有这种重命名.文件views/file/create.phpviews/file/index.php在一组全新的两个文件后半小时被真正删除 - views/logo/create.php并且views/logo/index.php已创建.

这两个文件集看起来(对于Git)非常相似,但事实仍然是 - 这些不同,重命名的文件.这是一组完整的新文件,在删除第一组文件之前约半小时在不同目录中创建.

由于Git提供的信息不正确,我想满足我的好奇心,这就是我要问的原因.

git

10
推荐指数
1
解决办法
1674
查看次数

为什么git-status显示更新的二进制文件,并将新名称作为重命名?

在处理二进制文件时,git似乎考虑用另一个文件替换文件,修改文件重命名.例如,当用foo-1.0.3.jar或以下测试用例替换foo-1.0.1.jar时会发生这种情况:

$ dd if=/dev/urandom of=test.dat bs=1024 count=10
$ md5sum test.dat
8073aef704e9df13b44818371ebbcc0b  test.dat
$ git add test.dat && git commit -m 'add binary file'
$ mv test.dat test2.dat
$ git rm test.dat
$ dd if=/dev/urandom of=test2.dat bs=1 count=1 conv=notrunc
$ md5sum test2.dat
21e1ac3ab9ba50c9dad9171f9de7232d  test2.dat
$ git add test2.dat
Run Code Online (Sandbox Code Playgroud)

现在我清楚地有一个包含新内容(至少部分)和新名称的文件.但是,git认为这是一个重命名git status:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    test.dat -> test2.dat
Run Code Online (Sandbox Code Playgroud)
  • 这是什么原因,例如这两个文件有多相似?如果test2.dat包含完全不同的数据,似乎不会发生这种情况.
  • 除了看起来有点尴尬之外,它有什么缺点吗?实际数据似乎非常好; 在检查以前的版本时,我确实得到了该版本的正确文件.

git binaryfiles

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

更改后指定Git重命名

由于我通常使用的工具,在准备提交之前,我经常重命名文件并对其进行更改。

此时,git不再将文件检测为简单的重命名,因为文件内容不同。

我可以使用一个命令来指定某个文件,即使内容看起来有所不同,实际上它也是另一个文件的重命名吗?

git

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

Git 重命名文件和 inode

考虑一下我们将以下命令应用于hello.txtgit 下跟踪的文件(在干净的工作副本中):

echo "hi" >> hello.txt
mv hello.txt bye.txt
git rm hello.txt
git add bye.txt
git status
Run Code Online (Sandbox Code Playgroud)

结果:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    hello.txt -> bye.txt
Run Code Online (Sandbox Code Playgroud)

因此,git 知道它是同一个文件,即使它被重命名了。我有一些模糊的记忆,git 检查 inode 以确定新文件与旧的已删除文件相同。 不过,这个这个SO 答案表明 git 只检查文件的内容,并且不会以任何方式检查它是否是相同的 inode。(我的结论(*):如果我对文件进行更大的修改,git 将不会检测到重命名,即使 inode 仍然相同。)

因此,在我看来,很明显,我错了,git 不检查 inode(或任何其他文件系统信息),只检查内容。但后来,我发现了另一个答案,它声称

除了时间戳之外,它[即git]还记录lstat的大小、inode和其他信息,以减少误报的机会。当您执行 git-status 时,它只需对工作树中的每个文件调用 lstat 并比较元数据,以便快速确定哪些文件未更改。

我对此实际上有两个问题:

  1. 我下面的理解正确吗?

Git 确实依赖(也)依赖 inode 来检测文件是否已更改,但它不使用 inode 来检测文件重命名。

  1. 假设 1. 是正确的。为什么 git 不依赖 inode …

git file-rename

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

当git rm和git add在不同的文件上完成时重命名文件

我刚刚做了git rm file1.c以后的git status节目

On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    file1.c

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    dir/file2.c
    dir/file3.c
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利.但是,如果git add dir/file2.c我得到了

On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local …
Run Code Online (Sandbox Code Playgroud)

git

2
推荐指数
1
解决办法
988
查看次数

如何使用git log --follow <filename>工作?

我试图为文件的历史记录选择一个id - 我希望它是或者引用其详细信息的"对象" git log --follow <filename>.我在想:

git如何知道一个文件是后续提交中另一个文件的变体?当然,名称相同是一个强烈的提示,但它也跟踪提交时的重命名.它是否将计算结果保存在git log引用的位置(where?),或git log是否每次都重复这些计算?(这些计算是什么?)

理想情况下,我想使用nodegit访问或重新创建历史记录(提交/ blob shas列表).

git

0
推荐指数
1
解决办法
1232
查看次数