2011-02-16 49 views
0

我有一个存储库,我终于与其他一些开发人员正常工作(我们正在通过FTP覆盖彼此杀死进行迁移)。ftp下载后git reset

其中一位开发人员使用FTP上传了对服务器的更改,并且我下载了这些更改,覆盖了我的本地文件夹。我在想git会识别出已经改变的文件,但事实并非如此。事实上,git认为文件没有改变。

是否有一个命令可以告诉git“物理重新扫描每个文件以进行更改并查看是否有任何改动”。此时,我不确定哪些文件是从FTP下载中更改的,所以当我执行git push/pull时,它表示没有更改,即使我知道有更改。

回答

0

Git使用存储在树根中名为.git的目录中的许多数据结构来跟踪存储库的状态 - 因此,如果您用FTP服务器上的同事的.git目录覆盖了该文件,那么就git可以告诉你具有与他上传时相同的存储库状态,因此当然不会有任何更改。

这不是一个很好的使用git的工作流程,但是如果您必须将FTP {up,down}加载与本地版本控制结合在一起,您可以将GIT_DIR环境变量设置为引用源代码树之外的目录(当您下载新的FTP快照时不会被覆盖),其中git可以跟踪存储库和历史元数据。

0

你应该认真考虑设置一个合适的git服务器,因为通过FTP传输更改会影响使用git等版本控制系统的目的。假设每个人都可以通过SSH访问服务器,安装起来相当简单,您只需在服务器上的每个人都可以读写的目录中创建一个裸存储库即可。也可以在无需为每个人提供shell访问权限的情况下进行设置。

你可以阅读更多有关在免费Pro Git book中设置git服务器的信息,其中详细介绍了几种不同的技术。你也可以使用托管的git服务,如果你宁愿去那条路线。

这就是说,马特的答案是正确的,可能是发生了什么:你无意中覆盖了git用来追踪本地存储库信息的目录。

如果GitHub中的内容仍然很好,您可以执行git fetch,然后git reset origin/master以使您的本地存储库恢复到GitHub上的远程回购状态,并且它将保留所有本地差异。这会导致您失去本地提交的任何提交给GitHub的提交,但不会导致任何数据在本地丢失。如果你在意外覆盖之​​后已经推到GitHub上,那么这可能不会有帮助(如果没有明确的--force,那么你可能无法完成)。您也可以通过指定提交的哈希代替“origin/master”来重置为特定的提交。

+0

我们使用的是github,而ftp只是一个疏忽。有一个开发者没有得到我们去的.git的信息,他用他的ftp重写了一些文件。 (不确定哪些改变了)。所以并不是所有的存储库都匹配。但文件服务器上的文件与存储库中的文件不同。所以我们需要全部删除我们的存储库,下载ftp中的内容并重新启动存储库? – 2011-02-16 15:17:58