Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找程序从git库分支的位置,不带.git_Git - Fatal编程技术网

查找程序从git库分支的位置,不带.git

查找程序从git库分支的位置,不带.git,git,Git,我有一个问题,与会议上讨论的问题没有什么不同,但差异很大 我有一个Git存储库,有6个分支、300多个文件和600多个提交 我还有一个代码体,它是同一存储库的(未提交的原始文件)分支。。。没有.git文件夹。换句话说,我有一组300多个文件,没有历史记录,没有提交标记或散列号 我想把这个非正式分支重新整合为一个正式分支 我需要找到哪个提交被复制,没有.git,然后被编辑 如何有效地执行此操作,即不执行所有600多个提交的手动“签出”并运行diff/meld和计算更改的文件数?您基本上希望找到与工

我有一个问题,与会议上讨论的问题没有什么不同,但差异很大

我有一个Git存储库,有6个分支、300多个文件和600多个提交

我还有一个代码体,它是同一存储库的(未提交的原始文件)分支。。。没有
.git
文件夹。换句话说,我有一组300多个文件,没有历史记录,没有提交标记或散列号

我想把这个非正式分支重新整合为一个正式分支

我需要找到哪个提交被复制,没有
.git
,然后被编辑


如何有效地执行此操作,即不执行所有600多个提交的手动“签出”并运行diff/meld和计算更改的文件数?

您基本上希望找到与工作目录的特定状态最相似的提交。首先创建一个本地分支并提交这300多个文件,使它们成为提交。然后,使用git Diff查找最相似的提交

下面的脚本应该可以做到这一点。它查找给定范围内的所有提交,然后估计每个提交和引用提交之间的不同行数。最后,它找到了最小的差异

#!/bin/bash

commit_to_compare_with=d67e
commit_range=1cb1d..e172

list_of_commits=($(git rev-list $commit_range))
num_of_commits=${#list_of_commits[@]}
minimal_diff_count=100000000

echo
echo Found $num_of_commits commits in the range $commit_range
echo

count_lines_of_diff() { git diff $1 $2 | wc -l; }

for c in "${list_of_commits[@]}"
do
  diff_count=$(count_lines_of_diff $commit_to_compare_with $c)
  echo ${c:0:4} differs from ${commit_to_compare_with:0:4} by $diff_count lines
  if [ $diff_count -lt $minimal_diff_count ]
  then
    most_similar_commit=$c
    minimal_diff_count=$diff_count
  fi
done

echo
echo Most similar commit to $commit_to_compare_with is $most_similar_commit
下面是我得到的输出:

Found 5 commits in the range 1cb1d..e172

e172 differs from d67e by 45 lines
1431 differs from d67e by 26 lines
20e2 differs from d67e by 347 lines
fb80 differs from d67e by 347 lines
8d67 differs from d67e by 360 lines

Most similar commit to d67e is 14310bc0cf69967d4781e0aec2fd2cca21d72ac6

您基本上希望找到与工作目录的特定状态最相似的提交。首先创建一个本地分支并提交这300多个文件,使它们成为提交。然后,使用git Diff查找最相似的提交

下面的脚本应该可以做到这一点。它查找给定范围内的所有提交,然后估计每个提交和引用提交之间的不同行数。最后,它找到了最小的差异

#!/bin/bash

commit_to_compare_with=d67e
commit_range=1cb1d..e172

list_of_commits=($(git rev-list $commit_range))
num_of_commits=${#list_of_commits[@]}
minimal_diff_count=100000000

echo
echo Found $num_of_commits commits in the range $commit_range
echo

count_lines_of_diff() { git diff $1 $2 | wc -l; }

for c in "${list_of_commits[@]}"
do
  diff_count=$(count_lines_of_diff $commit_to_compare_with $c)
  echo ${c:0:4} differs from ${commit_to_compare_with:0:4} by $diff_count lines
  if [ $diff_count -lt $minimal_diff_count ]
  then
    most_similar_commit=$c
    minimal_diff_count=$diff_count
  fi
done

echo
echo Most similar commit to $commit_to_compare_with is $most_similar_commit
下面是我得到的输出:

Found 5 commits in the range 1cb1d..e172

e172 differs from d67e by 45 lines
1431 differs from d67e by 26 lines
20e2 differs from d67e by 347 lines
fb80 differs from d67e by 347 lines
8d67 differs from d67e by 360 lines

Most similar commit to d67e is 14310bc0cf69967d4781e0aec2fd2cca21d72ac6