将“手动版本控制”项目添加到 git 存储库

将“手动版本控制”项目添加到 git 存储库

在我听说版本控制的奇妙之前,我将项目保存在“项目 x 1.0”、“项目 x 1.1”、“项目 x 1.2”等文件夹中。这种方法存在大量冗余,所以我想使用 git 来整合和版本控制系统。

最好的方法是什么?我假设我应该首先在“project x 1.0”上运行 git init,但是然后我如何将其他文件夹合并到项目中作为新的提交?(我对 git 还很陌生)

答案1

我将首先创建一个新的空目录,在其中创建一个 repo ,然后仅使用一个文件或某些东西git init进行第一次提交。.gitignore

然后将第一个修订版本中的所有文件复制到这个新目录,git add然后git commit。这将为您提供第一个真正的提交。

然后用第二次修订的内容复制/覆盖所有文件。git addgit commit

您可以根据需要重复此操作。第一步其实不是必需的,您可以在第一个修订版的目录中执行此操作。但在新目录中执行此操作可以让您完全不更改备份中的任何内容,因此如果您想改进/调整流程,您可以重新从头开始,而不会冒丢失旧目录中任何内容的风险。

答案2

有一本关于 git 的好书,叫做《Pro Git》。部分关于如何从自定义结构迁移。(请参阅自定义导入器)。这有点困难,但如果您有很多历史记录,那么这将是最好的方法。

另一种方法是:

# initialize a new repository
git init .
touch .gitignore
git add .
git commit -m "initial commit"

# copy all the files to working directory
cp -R backup_v01/* .
# stage all the files
git add .
# make the first commit
git commit -m "v0.1 from backup"

# remove all files
git rm -r *
# copy all the files to working directory
cp -R backup_v02/* .
git add .
git commit -m "v0.2 from backup"

这可以优化,但这个脚本很容易理解。在更新内容之前,您需要从存储库中删除所有旧文件,否则您将会保留一些旧的已删除文件。

当然整个过程可以做成一个脚本(repo.sh):

#!/bin/bash
REPODIR=$1

# initialize a new repository
git init $REPODIR

cd $REPODIR
touch .gitignore
git add .
git commit -m "initial commit"

while read DIR
do
  # remove all files
  git rm -r *
  # copy all the files to working directory
  cd ..
  cp -R $DIR/* $REPODIR/.
  # go back to repo dir
  cd $REPODIR
  # stage all the files
  git add .
  # make the first commit
  git commit -m "$DIR from backup"
done

为了使其使用相对路径工作,必须进行文件夹切换。

您可以通过将所有文件夹路径发送到脚本并指定存储库目录(它不能存在)来使用它:

# let's say all the backups are in this folder
# and there are no other folders

# test whether everything is in correct order
ls -d */ | sort

# verify that there is no repository directory
rm -rf REPO_DIR

# pipe the folder listing to the script
ls -d */ | sort | repo.sh REPO_DIR

答案3

另一种方法是,init在你的第一个项目版本中注册并提交后,移动.git存储库目录从 1.0 副本移至 1.1 副本,添加这些更改(用于git add --all注意删除)并提交,然后将其移动到 1.2,依此类推。

这种方法之所以有效,是因为 Git 不会在目录之外保存任何有关存储库状态的信息.git,因此它并不关心您是移动.git文件还是替换文件。但是,如果您有想要忽略的文件.gitignore,则需要将忽略文件单独添加到每个项目版本。

相关内容